From c78d030ba125efeec2982988b292269ee3c5ce5b Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Mon, 26 Sep 2016 18:17:21 +0200 Subject: [PATCH] Fixed KeyCollection loading Bug, Rename TriggerDisplayable --- .../src/de/tobias/playpad/PlayPadImpl.java | 4 -- .../src/de/tobias/playpad/PlayPadMain.java | 12 +++--- ...UIWrapper.java => TriggerDisplayable.java} | 4 +- .../pad/TriggerPadTabViewController.java | 16 +++---- .../trigger/TriggerPointViewController.java | 6 +-- .../playpad/settings/GlobalSettings.java | 5 +-- .../de/tobias/playpad/settings/keys/Key.java | 4 ++ .../playpad/settings/keys/KeyCollection.java | 42 +++++++++++++++---- 8 files changed, 58 insertions(+), 35 deletions(-) rename PlayWall/src/de/tobias/playpad/trigger/{TriggerUIWrapper.java => TriggerDisplayable.java} (91%) diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java index b63f6e43..fd298110 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java @@ -283,10 +283,6 @@ public class PlayPadImpl implements PlayPad { Pad.getVolumeManager().addFilter(new GlobalVolume()); Pad.getVolumeManager().addFilter(new PadVolume()); - // 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 a44ad94c..ecb8676f 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -84,16 +84,19 @@ public class PlayPadMain extends Application implements LocalizationDelegate { public void init() throws Exception { App app = ApplicationUtils.getApplication(); + // Localization + setupLocalization(); + + // Setup Global Settings Path globalSettingsPath = app.getPath(PathType.CONFIGURATION, "GlobalSettings.xml"); GlobalSettings globalSettings = GlobalSettings.load(globalSettingsPath); + globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", uiResourceBundle); + globalSettings.getKeyCollection().load(globalSettingsPath); impl = new PlayPadImpl(globalSettings); PlayPadPlugin.setImplementation(impl); PlayPadPlugin.setRegistryCollection(new RegistryCollectionImpl()); - // Localization - setupLocalization(); - // Console if (!app.isDebug()) { System.setOut(ConsoleUtils.streamToFile(app.getPath(PathType.LOG, "out.log"))); @@ -108,8 +111,7 @@ 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 diff --git a/PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java b/PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java similarity index 91% rename from PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java rename to PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java index edd8e29b..f385b888 100644 --- a/PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java +++ b/PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java @@ -8,11 +8,11 @@ import de.tobias.utils.util.Localization; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -public class TriggerUIWrapper implements Displayable { +public class TriggerDisplayable implements Displayable { private Trigger trigger; - public TriggerUIWrapper(Trigger trigger) { + public TriggerDisplayable(Trigger trigger) { this.trigger = trigger; updateString(); } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java index 6b90fd74..818e56c6 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java @@ -7,7 +7,7 @@ import de.tobias.playpad.Strings; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.tigger.Trigger; import de.tobias.playpad.tigger.TriggerPoint; -import de.tobias.playpad.trigger.TriggerUIWrapper; +import de.tobias.playpad.trigger.TriggerDisplayable; import de.tobias.playpad.viewcontroller.PadSettingsTabViewController; import de.tobias.playpad.viewcontroller.cell.DisplayableTreeCell; import de.tobias.playpad.viewcontroller.option.pad.trigger.TriggerPointViewController; @@ -20,9 +20,9 @@ import javafx.scene.control.TreeView; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; -public class TriggerPadTabViewController extends PadSettingsTabViewController implements ChangeListener<TreeItem<TriggerUIWrapper>> { +public class TriggerPadTabViewController extends PadSettingsTabViewController implements ChangeListener<TreeItem<TriggerDisplayable>> { - @FXML private TreeView<TriggerUIWrapper> treeView; + @FXML private TreeView<TriggerDisplayable> treeView; @FXML private VBox contentView; private Pad pad; @@ -40,13 +40,13 @@ public class TriggerPadTabViewController extends PadSettingsTabViewController im private void createTreeView() { HashMap<TriggerPoint, Trigger> triggers = pad.getPadSettings().getTriggers(); - TreeItem<TriggerUIWrapper> rootItem = new TreeItem<>(); + TreeItem<TriggerDisplayable> rootItem = new TreeItem<>(); // Sort the tpyes for the treeview for (TriggerPoint point : TriggerPoint.values()) { Trigger trigger = triggers.get(point); - TreeItem<TriggerUIWrapper> triggerItem = new TreeItem<>(new TriggerUIWrapper(trigger)); + TreeItem<TriggerDisplayable> triggerItem = new TreeItem<>(new TriggerDisplayable(trigger)); rootItem.getChildren().add(triggerItem); } @@ -54,12 +54,12 @@ public class TriggerPadTabViewController extends PadSettingsTabViewController im } @Override - public void changed(ObservableValue<? extends TreeItem<TriggerUIWrapper>> observable, TreeItem<TriggerUIWrapper> oldValue, - TreeItem<TriggerUIWrapper> newValue) { + public void changed(ObservableValue<? extends TreeItem<TriggerDisplayable>> observable, TreeItem<TriggerDisplayable> oldValue, + TreeItem<TriggerDisplayable> newValue) { contentView.getChildren().clear(); if (newValue != null) { - TriggerUIWrapper triggerWrapper = newValue.getValue(); + TriggerDisplayable triggerWrapper = newValue.getValue(); TriggerPointViewController controller = new TriggerPointViewController(triggerWrapper); contentView.getChildren().setAll(controller.getParent()); VBox.setVgrow(controller.getParent(), Priority.ALWAYS); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java index 04a53006..19421ded 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java @@ -7,7 +7,7 @@ import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.registry.NoSuchComponentException; import de.tobias.playpad.tigger.TriggerItem; import de.tobias.playpad.tigger.TriggerItemConnect; -import de.tobias.playpad.trigger.TriggerUIWrapper; +import de.tobias.playpad.trigger.TriggerDisplayable; import de.tobias.utils.ui.ContentViewController; import de.tobias.utils.ui.icon.FontAwesomeType; import de.tobias.utils.ui.icon.FontIcon; @@ -23,9 +23,9 @@ public class TriggerPointViewController extends ContentViewController { @FXML private VBox itemView; @FXML private HBox buttonBox; - private TriggerUIWrapper triggerWrapper; + private TriggerDisplayable triggerWrapper; - public TriggerPointViewController(TriggerUIWrapper triggerWrapper) { + public TriggerPointViewController(TriggerDisplayable triggerWrapper) { super("triggerPoint", "de/tobias/playpad/assets/view/option/pad/trigger/", PlayPadMain.getUiResourceBundle()); this.triggerWrapper = triggerWrapper; diff --git a/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java b/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java index 7dd12615..477780f8 100644 --- a/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java +++ b/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java @@ -147,7 +147,7 @@ public class GlobalSettings { // Save & Load Data - private static final String KEYS_ELEMENT = "Keys"; + public static final String KEYS_ELEMENT = "Keys"; private static final String AUTO_UPDATE_ELEMENT = "AutoUpdate"; private static final String IGNORE_UPDATE_ELEMENT = "IgnoreUpdate"; private static final String UPDATE_CHANNEL_ELEMENT = "UpdateChannel"; @@ -177,9 +177,6 @@ public class GlobalSettings { Document document = reader.read(Files.newInputStream(savePath)); Element root = document.getRootElement(); - if (root.element(KEYS_ELEMENT) != null) - settings.keyCollection.load(root.element(KEYS_ELEMENT)); - if (root.element(AUTO_UPDATE_ELEMENT) != null) { settings.setAutoUpdate(Boolean.valueOf(root.element(AUTO_UPDATE_ELEMENT).getStringValue())); } diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java index a281973d..a3d75334 100644 --- a/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java +++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java @@ -155,4 +155,8 @@ public class Key implements Displayable { displayProperty.set(toString()); return displayProperty; } + + public boolean isEmpty() { + return key.isEmpty() && !ctrl && !shift & !meta && !alt; + } } diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java index f68eb969..09711f38 100644 --- a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java +++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java @@ -1,5 +1,8 @@ package de.tobias.playpad.settings.keys; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -12,6 +15,7 @@ import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; +import de.tobias.playpad.settings.GlobalSettings; import de.tobias.utils.util.OS; import de.tobias.utils.xml.XMLHandler; @@ -60,15 +64,27 @@ public class KeyCollection { * @return Localized Name */ public String getName(String id) { - return keys.get(id).getName(); + KeyCollectionEntry keyCollectionEntry = keys.get(id); + if (keyCollectionEntry != null) { + return keyCollectionEntry.getName(); + } else { + return null; + } } public Key getKey(String id) { - return keys.get(id).getKey(); + KeyCollectionEntry keyCollectionEntry = keys.get(id); + if (keyCollectionEntry != null) { + return keyCollectionEntry.getKey(); + } else { + return null; + } } private void updateKey(Key key) { - keys.get(key.getId()).setKey(key); + KeyCollectionEntry keyCollectionEntry = keys.get(key.getId()); + if (keyCollectionEntry != null) + keyCollectionEntry.setKey(key); } public Collection<Key> getKeys() { @@ -98,7 +114,7 @@ public class KeyCollection { */ public boolean keysConflict(Key key) { for (KeyCollectionEntry k : keys.values()) { - if (k.getKey().getKeyCode().equals(key.getKeyCode())) { + if (k.getKey().getKeyCode().equals(key.getKeyCode()) && !key.isEmpty()) { return true; } } @@ -128,11 +144,19 @@ public class KeyCollection { private static final String KEY_ELEMENT = "Key"; - public void load(Element element) { - XMLHandler<Key> handler = new XMLHandler<>(element); - List<Key> keys = handler.loadElements(KEY_ELEMENT, new KeySerializer()); - for (Key key : keys) { - updateKey(key); + public void load(Path path) throws DocumentException, IOException { + if (Files.exists(path)) { + SAXReader reader = new SAXReader(); + Document document = reader.read(Files.newInputStream(path)); + Element root = document.getRootElement(); + + if (root.element(GlobalSettings.KEYS_ELEMENT) != null) { + XMLHandler<Key> handler = new XMLHandler<>(root.element(GlobalSettings.KEYS_ELEMENT)); + List<Key> keys = handler.loadElements(KEY_ELEMENT, new KeySerializer()); + for (Key key : keys) { + updateKey(key); + } + } } } -- GitLab