diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties index 9d1ef416099bc0f14fe5a98243cfd5bf81b02e33..6959ecc55af805f3d562f0a6dda7a8a754fd2eef 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties @@ -64,11 +64,11 @@ UI.Window.Settings.Layout.Title=Layout UI.Window.Settings.Player.Title=Player UI.Window.Settings.Audio.Title=Audio UI.Window.Settings.Updates.Title=Updates +UI.Window.Settings.Keys.Title=Tastaturbefehle -# UI - Dialog - DragAndDrop -UI.Dialog.DragAndDrop.Header=Hinweis -UI.Dialog.DragAndDrop.Content=F�r das Verschieben von Kacheln gibt es zwei M�glichkeiten: Vertauschen oder Ersetzen.\nUm die gw�hlte Kachel mit der Zielkachel zu vertauschen, muss der obere Teil der Zielkachel gew�hlt werden. Es erscheint eine blaue Umrandung. \nUm die ausgew�hlte Kachel mit der Zielkachel zu ersetzen, muss der untere Teil der Zielkachel gew�hlt werden. Es erscheint eine rote Umrandung. -UI.Dialog.DragAndDrop.Button=OK +# UI - Settings - Keys +UI.Settings.Keys.Conflict.Header=Konflikt +UI.Settings.Keys.Conflict.Content=Es gibt bereits Aktionen, bei denen diese Tastenkombination verwendet wird: \n{} # UI - Dialog - NewProfile UI.Dialog.NewProfile.Content=Geben Sie einen Namen f�r das neue Profil ein: @@ -239,4 +239,13 @@ TriggerPoint.EOF_STOP=Ende/Stop # Drag and Drop Mode DnDMode.Replace=Ersetzen -DnDMode.Move=Tauschen \ No newline at end of file +DnDMode.Move=Tauschen + +# Main Layout +MainLayout.Desktop=Desktop Modus +MainLayout.Touch=Touch Modus + +# Suche +Search.Button=Suchen +Search.Placeholder=Suche +Search.Alert.NoMatches=Keine Treffer gefunden. \ No newline at end of file diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java index 122153c953b38061ea660d50a7ef86286e0d95e3..404fc9252092805c6fd6909cd176d420c921f9a1 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java @@ -12,13 +12,23 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.ResourceBundle; import java.util.Set; +import org.dom4j.DocumentException; + +import de.tobias.playpad.action.mapper.MapperRegistry; +import de.tobias.playpad.audio.JavaFXAudioHandler; +import de.tobias.playpad.design.modern.ModernGlobalDesign; +import de.tobias.playpad.midi.device.DeviceRegistry; +import de.tobias.playpad.midi.device.PD12; import de.tobias.playpad.plugin.PadListener; import de.tobias.playpad.plugin.SettingsListener; import de.tobias.playpad.plugin.WindowListener; import de.tobias.playpad.project.Project; +import de.tobias.playpad.registry.NoSuchComponentException; import de.tobias.playpad.settings.GlobalSettings; +import de.tobias.playpad.view.MapperOverviewViewController; import de.tobias.playpad.viewcontroller.IPadSettingsViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MainViewControllerV2; @@ -50,7 +60,7 @@ public class PlayPadImpl implements PlayPad { public PlayPadImpl(GlobalSettings globalSettings) { pluginManager = PluginManagerFactory.createPluginManager(); deletedPlugins = new HashSet<>(); - + this.globalSettings = globalSettings; } @@ -141,6 +151,19 @@ public class PlayPadImpl implements PlayPad { @Override public void shutdown() { + // Shutdown components + PlayPadPlugin.getRegistryCollection().getAudioHandlers().getComponents().forEach(i -> + { + if (i instanceof AutoCloseable) { + try { + ((AutoCloseable) i).close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }); + // Delete Plugins Info Textfile --> Löschen dann beim Start. Path pluginInfoPath = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, PLUGIN_INFO_TXT); try { @@ -181,4 +204,41 @@ public class PlayPadImpl implements PlayPad { public Project getCurrentProject() { return currentProject; } + + public void startup(ResourceBundle resourceBundle) { + registerComponents(resourceBundle); + } + + private void registerComponents(ResourceBundle resourceBundle) { + // Midi + DeviceRegistry.getFactoryInstance().registerDevice(PD12.NAME, PD12.class); + + try { + // Load Components + RegistryCollection registryCollection = PlayPadPlugin.getRegistryCollection(); + + registryCollection.getActions().loadComponentsFromFile("de/tobias/playpad/components/Actions.xml"); + registryCollection.getAudioHandlers().loadComponentsFromFile("de/tobias/playpad/components/AudioHandler.xml"); + registryCollection.getDragModes().loadComponentsFromFile("de/tobias/playpad/components/DragMode.xml"); + registryCollection.getDesigns().loadComponentsFromFile("de/tobias/playpad/components/Design.xml"); + registryCollection.getMappers().loadComponentsFromFile("de/tobias/playpad/components/Mapper.xml"); + registryCollection.getPadContents().loadComponentsFromFile("de/tobias/playpad/components/PadContent.xml"); + registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml"); + registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml"); + + // Set Default + registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.NAME); + registryCollection.getDesigns().setDefaultID(ModernGlobalDesign.TYPE); + } catch (IllegalAccessException | ClassNotFoundException | InstantiationException | IOException | DocumentException + | NoSuchComponentException e) { + e.printStackTrace(); + } + + // Key Bindings + GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings(); + globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", resourceBundle); + + // Mapper + MapperRegistry.setOverviewViewController(new MapperOverviewViewController()); + } } diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index cdec5baf549e2c510843e47d536acc7d54a639bf..1deaee5ee10d09486f3f4f9ce678b6e395af50f2 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -12,9 +12,7 @@ import java.util.UUID; import org.dom4j.DocumentException; import de.tobias.playpad.action.mapper.MapperRegistry; -import de.tobias.playpad.audio.ClipAudioHandler; import de.tobias.playpad.audio.JavaFXAudioHandler; -import de.tobias.playpad.audio.TinyAudioHandler; import de.tobias.playpad.design.modern.ModernGlobalDesign; import de.tobias.playpad.midi.device.DeviceRegistry; import de.tobias.playpad.midi.device.PD12; @@ -135,14 +133,16 @@ public class PlayPadMain extends Application implements LocalizationDelegate { try { Image stageIcon = new Image(iconPath); PlayPadMain.stageIcon = Optional.of(stageIcon); - } catch (Exception e) {} + } catch (Exception e) { + } /* * Setup */ updater = new PlayPadUpdater(); UpdateRegistery.registerUpdateable(updater); - registerComponents(); + + impl.startup(uiResourceBundle); // Load Plugin Path Path pluginFolder; @@ -216,50 +216,12 @@ public class PlayPadMain extends Application implements LocalizationDelegate { e.printStackTrace(); // Speichern Fehler } - // Shutdown components - // TODO use AutoCloseable - TinyAudioHandler.shutdown(); - ClipAudioHandler.shutdown(); - impl.shutdown(); Platform.exit(); System.exit(0); } - private void registerComponents() { - // Midi - DeviceRegistry.getFactoryInstance().registerDevice(PD12.NAME, PD12.class); - - try { - // Load Components - RegistryCollection registryCollection = PlayPadPlugin.getRegistryCollection(); - - registryCollection.getActions().loadComponentsFromFile("de/tobias/playpad/components/Actions.xml"); - registryCollection.getAudioHandlers().loadComponentsFromFile("de/tobias/playpad/components/AudioHandler.xml"); - registryCollection.getDragModes().loadComponentsFromFile("de/tobias/playpad/components/DragMode.xml"); - registryCollection.getDesigns().loadComponentsFromFile("de/tobias/playpad/components/Design.xml"); - registryCollection.getMappers().loadComponentsFromFile("de/tobias/playpad/components/Mapper.xml"); - registryCollection.getPadContents().loadComponentsFromFile("de/tobias/playpad/components/PadContent.xml"); - registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml"); - registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml"); - - // Set Default - registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.NAME); - registryCollection.getDesigns().setDefaultID(ModernGlobalDesign.TYPE); - } catch (IllegalAccessException | ClassNotFoundException | InstantiationException | IOException | DocumentException - | NoSuchComponentException e) { - e.printStackTrace(); - } - - // Key Bindings - GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings(); - globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", uiResourceBundle); - - // Mapper - MapperRegistry.setOverviewViewController(new MapperOverviewViewController()); - } - private void setupPlugins(Path pluginPath) throws IOException, MalformedURLException { // Delete old plugins impl.deletePlugins(); diff --git a/PlayWall/src/de/tobias/playpad/Strings.java b/PlayWall/src/de/tobias/playpad/Strings.java index 7234c38e9af7f4ac4488865c2033ee586f12a52b..1aa77636498762172134499ff04d107865de737e 100644 --- a/PlayWall/src/de/tobias/playpad/Strings.java +++ b/PlayWall/src/de/tobias/playpad/Strings.java @@ -61,11 +61,11 @@ public class Strings { public static final String UI_Window_Settings_Player_Title = "UI.Window.Settings.Player.Title"; public static final String UI_Window_Settings_Audio_Title = "UI.Window.Settings.Audio.Title"; public static final String UI_Window_Settings_Updates_Title = "UI.Window.Settings.Updates.Title"; + public static final String UI_Window_Settings_Keys_Title = "UI.Window.Settings.Keys.Title"; - // UI - Dialogs - DragAndDrop - public static final String UI_Dialog_DragAndDrop_Header = "UI.Dialog.DragAndDrop.Header"; - public static final String UI_Dialog_DragAndDrop_Content = "UI.Dialog.DragAndDrop.Content"; - public static final String UI_Dialog_DragAndDrop_Button = "UI.Dialog.DragAndDrop.Button"; + // UI - Settings - Keys + public static final String UI_Settings_Keys_Conflict_Header = "UI.Settings.Keys.Conflict.Header"; + public static final String UI_Settings_Keys_Conflict_Content = "UI.Settings.Keys.Conflict.Content"; // UI - Dialog - NewProfile public static final String UI_Dialog_NewProfile_Content = "UI.Dialog.NewProfile.Content"; @@ -169,9 +169,9 @@ public class Strings { public static final String Info_Mapper_PressKey = "Info.Mapper.PressKey"; // UI - Settings - Aler - + public static final String UI_Settings_Alert_NewKeyShortcut_Text = "UI.Settings.Alert.NewKeyShortcut.Text"; - + // UI - Window - PadSettings public static final String UI_Window_PadSettings_General_Title = "UI.Window.PadSettings.General.Title"; public static final String UI_Window_PadSettings_Player_Title = "UI.Window.PadSettings.Player.Title"; @@ -228,4 +228,13 @@ public class Strings { // Drag and Drop Mode public static final String DnDMode_Move = "DnDMode.Move"; public static final String DnDMode_Replace = "DnDMode.Replace"; + + // Main Layout + public static final String MainLayout_Desktop = "MainLayout.Desktop"; + public static final String MainLayout_Touch = "MainLayout.Touch"; + + // Search + public static final String Search_Button="Search.Button"; + public static final String Search_Placeholder="Search.Placeholder"; + public static final String Search_Alert_NoMatches = "Search.Alert.NoMatches"; } diff --git a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java index 64b3de3e6334da309219d164af8d7470afe84c0e..2da8971e4a32ea91006b39fdc13c0afd2a77d4e7 100644 --- a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java +++ b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java @@ -34,7 +34,7 @@ import javazoom.jl.decoder.JavaLayerException; public class ClipAudioHandler extends AudioHandler { - // TODO Change names + public static final String TYPE = "clip"; public static final String NAME = "Clip (Experimental)"; private static final String MP3 = "mp3"; @@ -84,7 +84,9 @@ public class ClipAudioHandler extends AudioHandler { } Thread.sleep(SLEEP_TIME_POSITION); - } catch (InterruptedException e) {} catch (ConcurrentModificationException e) {} catch (Exception e) { + } catch (InterruptedException e) { + } catch (ConcurrentModificationException e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java index e78e6895cc3a546dba104369f15f6e4ae96e80ee..bb004a440ff00caa12fc400a3ab4fb9f44cdb2eb 100644 --- a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java @@ -1,7 +1,7 @@ package de.tobias.playpad.audio; import de.tobias.playpad.pad.conntent.PadContent; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.playpad.viewcontroller.audio.ClipSettingsViewController; public class ClipAudioHandlerConnect extends AudioHandlerConnect implements AutoCloseable { @@ -12,10 +12,15 @@ public class ClipAudioHandlerConnect extends AudioHandlerConnect implements Auto } @Override - public AudioTypeViewController getAudioViewController() { + public AudioHandlerViewController getAudioHandlerSettingsViewController() { return new ClipSettingsViewController(); } - + + @Override + public String getType() { + return ClipAudioHandler.TYPE; + } + @Override public void close() throws Exception { TinyAudioHandler.shutdown(); diff --git a/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java index 4792e37a92538363d0473e2ffac5a974246d8054..d961972a6eec022d974274e512c2ca2e2ccd6cc4 100644 --- a/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java +++ b/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java @@ -18,6 +18,7 @@ import javafx.util.Duration; public class JavaFXAudioHandler extends AudioHandler implements Equalizable { + public static final String TYPE = "JavaFx"; public static final String NAME = "Java FX Media"; private Media media; diff --git a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java index 9a5e3fb8cfc71d87b064285e4d8057a43472639b..baca001b6e97120e49f96f5bde06800138aded15 100644 --- a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java @@ -1,7 +1,7 @@ package de.tobias.playpad.audio; import de.tobias.playpad.pad.conntent.PadContent; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; public class JavaFXHandlerConnect extends AudioHandlerConnect { @@ -11,7 +11,12 @@ public class JavaFXHandlerConnect extends AudioHandlerConnect { } @Override - public AudioTypeViewController getAudioViewController() { + public AudioHandlerViewController getAudioHandlerSettingsViewController() { return null; } + + @Override + public String getType() { + return JavaFXAudioHandler.TYPE; + } } diff --git a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java index 7bf652f8fa50e2f7dffd0d9bcec260dd2dba41f5..8c412a0eeb3df7d37e9a6f16497082b1ad4cc916 100644 --- a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java +++ b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java @@ -40,8 +40,10 @@ public class TinyAudioHandler extends AudioHandler { public static final String SOUND_CARD = "SoundCard"; + public static final String TYPE = "TinyAudio"; public static final String NAME = "Java Audiostream"; private static final String MP3 = "mp3"; + private static final int SLEEP_TIME_POSITION = 50; private static ExecutorService executorService; diff --git a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java index c8e8904c0b953c3dfa3e99f7e162bbe5ca7cf6c4..cf8388f1f83557cf8c9ab87b7a84c2faca1de8ee 100644 --- a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java @@ -1,7 +1,7 @@ package de.tobias.playpad.audio; import de.tobias.playpad.pad.conntent.PadContent; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.playpad.viewcontroller.audio.TinySoundSettingsViewController; public class TinyAudioHandlerConnect extends AudioHandlerConnect implements AutoCloseable { @@ -12,10 +12,15 @@ public class TinyAudioHandlerConnect extends AudioHandlerConnect implements Auto } @Override - public AudioTypeViewController getAudioViewController() { + public AudioHandlerViewController getAudioHandlerSettingsViewController() { return new TinySoundSettingsViewController(); } + @Override + public String getType() { + return TinyAudioHandler.TYPE; + } + @Override public void close() throws Exception { TinyAudioHandler.shutdown(); diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java index e39b0662a6fded232f1cfed715e10a6432e4fe21..fa69b00d01afe46c5bd318a4b9c764ab05cc9f63 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java @@ -2,13 +2,24 @@ package de.tobias.playpad.layout.desktop; import java.util.Stack; +import de.tobias.playpad.Strings; import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; +import de.tobias.utils.util.Localization; +/** + * Desktop Implmentierung des Main Layouts. + * + * @author tobias + * + * @since 5.1.0 + */ public class DesktopMainLayoutConnect implements MainLayoutConnect { + private static final String TYPE = "Desktop"; + private DesktopMenuToolbarViewController desktopMenuToolbarViewController; private Stack<IPadViewV2> recyclingStack; @@ -19,12 +30,12 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { @Override public String getType() { - return "Desktop"; + return TYPE; } @Override public String name() { - return "Desktop Modus"; // TODO Localize + return Localization.getString(Strings.MainLayout_Desktop); } @Override diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index adc1a04d9b370bd22cfa28997bad275ccfba4b13..837bd0198fbabf669de498497e18498ee9bc335c 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -583,9 +583,9 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro @FXML void searchPadHandler(ActionEvent event) { TextField field = TextFields.createClearableTextField(); - field.setPromptText("Suche"); // TODO i18n + field.setPromptText(Localization.getString(Strings.Search_Placeholder)); - Button button = new Button("Suchen"); // TODO i18n + Button button = new Button(Localization.getString(Strings.Search_Button)); button.setOnAction(new DesktopSearchController(field, this)); HBox box = new HBox(14, field, button); diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java index dbe3475f6d5e2b6a56eafb54f4577c7a737fe9a2..ddeb4138d48ceeb95bdbc745018e02049f0884c5 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java @@ -2,10 +2,12 @@ package de.tobias.playpad.layout.desktop; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.Strings; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.project.Project; import de.tobias.utils.ui.Alertable; +import de.tobias.utils.util.Localization; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.TextField; @@ -45,7 +47,7 @@ public class DesktopSearchController implements EventHandler<ActionEvent> { } } } - alertable.showInfoMessage("Keine weiteren Treffer gefunden.", PlayPadMain.stageIcon.orElse(null)); // TODO i18n + alertable.showInfoMessage(Localization.getString(Strings.Search_Alert_NoMatches), PlayPadMain.stageIcon.orElse(null)); currentIndex = 0; } } diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java index be191f56a28e7532539d29cb62599978eddc4235..a82f250d1e134b8e7ee25222b71f55b6b109a8f3 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java @@ -2,13 +2,24 @@ package de.tobias.playpad.layout.touch; import java.util.Stack; +import de.tobias.playpad.Strings; import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; +import de.tobias.utils.util.Localization; +/** + * Touch Implementierung des Main Layout. + * + * @author tobias + * + * @since 5.1.0 + */ public class TouchMainLayoutConnect implements MainLayoutConnect { + private static final String TYPE = "Touch"; + private TouchMenuToolbarViewController touchMainLayoutConnect; private Stack<IPadViewV2> recyclingStack; @@ -16,15 +27,15 @@ public class TouchMainLayoutConnect implements MainLayoutConnect { public TouchMainLayoutConnect() { recyclingStack = new Stack<>(); } - + @Override public String getType() { - return "Touch"; + return TYPE; } @Override public String name() { - return "Touch Modus"; // TODO Localize + return Localization.getString(Strings.MainLayout_Touch); } @Override diff --git a/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java b/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java index bf8e4f9aa04fe6cdad26acecd31e36811ff70774..1059be7fc18a4924b45523fb2ee262ab692b88cc 100644 --- a/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java +++ b/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java @@ -26,7 +26,7 @@ public class HelpMenuItem extends CustomMenuItem implements ChangeListener<Strin setHideOnClick(false); - Label label = new Label("Suchen nach (Beta): "); // TODO i18n + Label label = new Label("Suchen nach (Beta): "); // TODO BETA i18n TextField textfield = new TextField(); textfield.textProperty().addListener(this); diff --git a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java index 5b293810c01492b41bc75d75ec3fa3f0d8ca012c..5ae0d9f6a0f9de033b308e52034cb98731109147 100644 --- a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java +++ b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java @@ -62,7 +62,15 @@ public class MapperOverviewViewController implements IMapperOverviewViewControll Set<String> types = registry.getTypes(); types.stream().sorted().forEach(item -> { - Button button = new Button(item.toString(), new FontIcon(FontAwesomeType.PLUS_CIRCLE)); + String name = item; + try { + MapperConnect connect = registry.getComponent(item); + name = connect.toString(); + } catch (NoSuchComponentException e) { + // TODO Error Handling + e.printStackTrace(); + } + Button button = new Button(name, new FontIcon(FontAwesomeType.PLUS_CIRCLE)); button.setContentDisplay(ContentDisplay.TOP); button.setPrefWidth(150); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java index 624d6c557b49d8606a58b71d5af1a82d0c29d919..1cf62dd4e5bc531cced38b433420086db33ab173 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java @@ -15,7 +15,7 @@ import javax.sound.sampled.UnsupportedAudioFileException; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.audio.TinyAudioHandler; import de.tobias.playpad.settings.Profile; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.utils.ui.icon.FontAwesomeType; import de.tobias.utils.ui.icon.FontIcon; import de.tobias.utils.util.Worker; @@ -27,7 +27,7 @@ import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.util.Callback; -public class ClipSettingsViewController extends AudioTypeViewController implements Callback<ListView<Info>, ListCell<Info>> { +public class ClipSettingsViewController extends AudioHandlerViewController implements Callback<ListView<Info>, ListCell<Info>> { @FXML private ComboBox<Info> soundCardComboBox; @FXML private Button testButton; diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java index 4429ba72ad6c5bc5b937e314e491e1248bdb7c19..799ed153cf5d716f4bb78e1ebd71903b2a759e40 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java @@ -15,7 +15,7 @@ import javax.sound.sampled.UnsupportedAudioFileException; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.audio.TinyAudioHandler; import de.tobias.playpad.settings.Profile; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.utils.ui.icon.FontAwesomeType; import de.tobias.utils.ui.icon.FontIcon; import de.tobias.utils.util.Worker; @@ -27,7 +27,7 @@ import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.util.Callback; -public class TinySoundSettingsViewController extends AudioTypeViewController implements Callback<ListView<Info>, ListCell<Info>> { +public class TinySoundSettingsViewController extends AudioHandlerViewController implements Callback<ListView<Info>, ListCell<Info>> { @FXML private ComboBox<Info> soundCardComboBox; @FXML private Button testButton; diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java index 6143bc834cdf0810172eef642d3453118feb3e44..bdb1365e8876705f535af099cac91c846cf7f70a 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java @@ -1,8 +1,6 @@ package de.tobias.playpad.viewcontroller.dialog; import de.tobias.playpad.PlayPadMain; -import de.tobias.playpad.Strings; -import de.tobias.utils.util.Localization; import javafx.scene.control.Dialog; import javafx.scene.control.Label; import javafx.scene.image.ImageView; @@ -13,7 +11,6 @@ import javafx.stage.Window; public class UpdaterDialog extends Dialog<Void> { public UpdaterDialog(Window owner) { - setHeaderText(Localization.getString(Strings.UI_Dialog_DragAndDrop_Header)); setGraphic(new ImageView("org/controlsfx/dialog/dialog-information.png")); Label textLabel = new Label( diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..c0df4125f1f51dfd7c8215b511526f33b1883254 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java @@ -0,0 +1,33 @@ +package de.tobias.playpad.viewcontroller.option.global; + +import java.util.List; + +import de.tobias.playpad.PlayPadMain; +import de.tobias.playpad.Strings; +import de.tobias.playpad.settings.keys.Key; +import de.tobias.playpad.settings.keys.KeyCollection; +import de.tobias.utils.util.Localization; +import javafx.scene.control.Alert; +import javafx.stage.Modality; +import javafx.stage.Stage; + +public class KeysConflictDialog extends Alert { + + public KeysConflictDialog(List<Key> conflicts, KeyCollection collection) { + super(AlertType.ERROR); + + String keys = ""; + for (int i = 0; i < conflicts.size(); i++) { + keys += "- " + collection.getName(conflicts.get(i).getId()); + if (i + 1 < conflicts.size()) { + keys += "\n"; + } + } + setHeaderText(Localization.getString(Strings.UI_Settings_Keys_Conflict_Header)); + setContentText(Localization.getString(Strings.UI_Settings_Keys_Conflict_Content, keys)); + + Stage dialogStage = (Stage) getDialogPane().getScene().getWindow(); + PlayPadMain.stageIcon.ifPresent(dialogStage.getIcons()::add); + initModality(Modality.WINDOW_MODAL); + } +} diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java index c6132c91e319ce4ea2d54fcbb48d80a0d5fa2db2..db63105828e12ced20b8e68e9e06577c7a3ddecb 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java @@ -6,6 +6,7 @@ import de.tobias.playpad.Strings; import de.tobias.playpad.project.Project; import de.tobias.playpad.settings.GlobalSettings; import de.tobias.playpad.settings.keys.Key; +import de.tobias.playpad.settings.keys.KeyCollection; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.GlobalSettingsTabViewController; import de.tobias.utils.util.Localization; @@ -28,6 +29,7 @@ import javafx.scene.control.TableRow; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; +import javafx.stage.Modality; import javafx.stage.Stage; public class KeysTabViewController extends GlobalSettingsTabViewController { @@ -134,20 +136,27 @@ public class KeysTabViewController extends GlobalSettingsTabViewController { Key newKey = new Key(currentKey.getId(), key, ev.isControlDown(), ev.isAltDown(), ev.isMetaDown(), ev.isShiftDown()); GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings(); - boolean conflict = globalSettings.getKeyCollection().keysConflict(newKey); + KeyCollection keyCollection = globalSettings.getKeyCollection(); + + boolean conflict = keyCollection.keysConflict(newKey); if (!conflict) { - globalSettings.getKeyCollection().editKey(newKey); + keyCollection.editKey(newKey); shortcutLabel.setText(currentKey.toString()); Platform.runLater(() -> ((Stage) scene.getWindow()).close()); } else { - showErrorMessage("Konflikt"); // TODO Localize + KeysConflictDialog dialog = new KeysConflictDialog(keyCollection.getConflicts(newKey), keyCollection); + dialog.initOwner(getStage()); + dialog.showAndWait(); } } }); alert.getButtonTypes().add(ButtonType.CANCEL); alert.initOwner(getWindow()); + alert.initModality(Modality.WINDOW_MODAL); + Stage alertStage = (Stage) alert.getDialogPane().getScene().getWindow(); + PlayPadMain.stageIcon.ifPresent(alertStage.getIcons()::add); alert.showAndWait(); } @@ -179,8 +188,7 @@ public class KeysTabViewController extends GlobalSettingsTabViewController { @Override public String name() { - // TODO Auto-generated method stub - return "Keyboard (I18N)"; + return Localization.getString(Strings.UI_Window_Settings_Keys_Title); } private void search() { 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 7faa367ac3794cff8f7517b603693eaef7a4803a..1972fd9b8b99293d4375a2a6f854946a16ec656e 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java @@ -8,7 +8,7 @@ import de.tobias.playpad.project.Project; import de.tobias.playpad.registry.NoSuchComponentException; import de.tobias.playpad.settings.Profile; import de.tobias.playpad.settings.ProfileSettings; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.ProfileSettingsTabViewController; import de.tobias.utils.util.Localization; @@ -22,7 +22,7 @@ public class AudioTabViewController extends ProfileSettingsTabViewController { // Audio @FXML private ComboBox<String> audioTypeComboBox; @FXML private AnchorPane audioUserInfoSettings; - private AudioTypeViewController audioViewController; + private AudioHandlerViewController audioViewController; private boolean changeAudioSettings; public AudioTabViewController(boolean playerActive) { @@ -63,7 +63,7 @@ public class AudioTabViewController extends ProfileSettingsTabViewController { try { AudioRegistry audioHandlerRegistry = PlayPadPlugin.getRegistryCollection().getAudioHandlers(); - audioViewController = audioHandlerRegistry.getComponent(classID).getAudioViewController(); + audioViewController = audioHandlerRegistry.getComponent(classID).getAudioHandlerSettingsViewController(); if (audioViewController != null) { audioUserInfoSettings.getChildren().add(audioViewController.getParent()); diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java index 7b0f8aeb949969c2f0e3cb0bbd04cca3faa5e570..dee8a0e13d6a7268720ec5a9c093099a4c2e4ab9 100644 --- a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java +++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java @@ -13,7 +13,6 @@ public abstract class AudioHandler { private PadContent content; public AudioHandler(PadContent content) { - super(); this.content = content; } diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java index 5a35082ebab80875af6b917782db1239ebb861a6..0d280a36ffd3d4af4f52975cd8cf2f4c1c577c85 100644 --- a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java +++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java @@ -1,12 +1,38 @@ package de.tobias.playpad.audio; import de.tobias.playpad.pad.conntent.PadContent; -import de.tobias.playpad.viewcontroller.AudioTypeViewController; +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. + * + * @author tobias + * + * @since 5.0.0 + */ public abstract class AudioHandlerConnect { + /** + * Erstellt für eine Kachel ein neunes AudioInterface + * + * @param content + * Content des Pads + * @return AudioHandler + */ public abstract AudioHandler createAudioHandler(PadContent content); - public abstract AudioTypeViewController getAudioViewController(); + /** + * Gibt den Settings View Controller für die Audio Schnittstelle zurück.s + * + * @return neuer ViewContoller + */ + public abstract AudioHandlerViewController getAudioHandlerSettingsViewController(); + /** + * Gibt den Type des AudioHandlers zurück. + * + * @return Type + */ + public abstract String getType(); } diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java index f47a1e5ffbbe3a05f32c5f74627e6be5c5c5ba69..85518577e5cff024333007fdca3a82db9d375e76 100644 --- a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java +++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java @@ -1,5 +1,6 @@ package de.tobias.playpad.settings.keys; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -73,6 +74,16 @@ public class KeyCollection { } return false; } + + public List<Key> getConflicts(Key key) { + List<Key> conflicts = new ArrayList<>(); + for (Key k : keys.values()) { + if (k.getKeyCode().equals(key.getKeyCode())) { + conflicts.add(k); + } + } + return conflicts; + } private static final String KEY_ELEMENT = "Key"; diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java similarity index 80% rename from PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java rename to PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java index ee065a8d8fa59a2b0b69508894b1eea223b718dd..ba5e4d0af5824208ba515155ddd68e2fe7a70397 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java @@ -12,7 +12,7 @@ import de.tobias.utils.ui.ContentViewController; * * @see AudioHandlerConnect */ -public abstract class AudioTypeViewController extends ContentViewController { +public abstract class AudioHandlerViewController extends ContentViewController { /** * Neuer ViewController. @@ -24,7 +24,7 @@ public abstract class AudioTypeViewController extends ContentViewController { * @param localization * Localization */ - public AudioTypeViewController(String name, String path, ResourceBundle localization) { + public AudioHandlerViewController(String name, String path, ResourceBundle localization) { super(name, path, localization); }