diff --git a/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml b/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml index 4825083a71d4ace4249e86fe5788d1d5321a5423..bdb58adea1840e7ab71b4e3a44c8b946eb79c243 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml @@ -32,7 +32,7 @@ </HBox> <HBox alignment="CENTER_LEFT" spacing="14.0"> <children> - <Label alignment="CENTER_RIGHT" prefWidth="100.0" text="%settings.midi.label.device" /> + <Label alignment="CENTER_RIGHT" prefWidth="100.0" text="%settings.midi.label.midiDeviceImpl" /> <ComboBox fx:id="midiDeviceComboBox" maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" /> </children> </HBox> diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties index 119bd5e46bfcef6e27dda8cd2a5614588dd356ea..43587b86cfd54a3da7381c623befbe127bc3045c 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties @@ -54,7 +54,7 @@ settings.gen.cache.label.info=Wenn Sie als Audioausgabetyp "Java Audiostream" ge settings.mapping.label.mapping=Mapping: settings.mapping.button.edit=Bearbeiten... -settings.midi.label.device=Midi-Ger\u00E4te: +settings.midi.label.midiDeviceImpl=Midi-Ger\u00E4te: settings.layout.label.type=Layout Type: diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml index c65c10d53e6eac505cc56160ada1d49e3a428287..8816e719ec37e1b51adf0723ed26ad3308d2d6df 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml @@ -10,7 +10,7 @@ <children> <HBox spacing="14.0"> <children> - <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%settings.midi.label.device"> + <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%settings.midi.label.midiDeviceImpl"> <HBox.margin> <Insets top="4.0" /> </HBox.margin> diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java index a9f22a3ecbc2c3a7d73722b0f54fcf3e6655c6e0..0e787f8e836a1d6c9ef0ca43c37786d97130d84e 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java @@ -18,11 +18,7 @@ import java.util.Set; import de.tobias.playpad.audio.JavaFXHandlerFactory; import de.tobias.playpad.design.modern.ModernDesignFactory; -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.pad.Pad; @@ -32,9 +28,9 @@ 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.BaseMapperOverviewViewController; import de.tobias.playpad.viewcontroller.IPadSettingsViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MainViewController; @@ -76,7 +72,7 @@ public class PlayPadImpl implements PlayPad { private Set<Module> modules; - public PlayPadImpl(GlobalSettings globalSettings) { + PlayPadImpl(GlobalSettings globalSettings) { App app = ApplicationUtils.getApplication(); module = new Module(app.getInfo().getName(), app.getInfo().getIdentifier()); @@ -252,7 +248,7 @@ public class PlayPadImpl implements PlayPad { return currentProject; } - public void startup(ResourceBundle resourceBundle) { + void startup(ResourceBundle resourceBundle) { registerComponents(resourceBundle); } @@ -286,7 +282,7 @@ public class PlayPadImpl implements PlayPad { Pad.getVolumeManager().addFilter(new PadVolume()); // Mapper - MapperRegistry.setOverviewViewController(new MapperOverviewViewController()); + BaseMapperOverviewViewController.setInstance(new MapperOverviewViewController()); } diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java index 2893dd123598aae235ac5345f0f4819c0717ed42..8a9c9e24d0f0edadc22e78d898be16d60256bd9c 100644 --- a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java +++ b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java @@ -1,7 +1,6 @@ package de.tobias.playpad.action.mapper; -import java.util.Optional; - +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import org.dom4j.Element; import de.tobias.playpad.Strings; @@ -13,7 +12,6 @@ import de.tobias.playpad.action.feedback.FeedbackMessage; import de.tobias.playpad.action.feedback.FeedbackType; import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback; import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback; -import de.tobias.playpad.action.mididevice.Device; import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.viewcontroller.mapper.MidiMapperViewController; @@ -33,11 +31,11 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac private Feedback feedback; private FeedbackType feedbackType; - public MidiMapper(String type) { + MidiMapper(String type) { this(type, 0, 0); } - public MidiMapper(String type, int command, int key) { + MidiMapper(String type, int command, int key) { this.type = type; this.command = command; this.key = key; @@ -84,10 +82,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac } @Override - public void handleFeedback(FeedbackMessage type) { - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - device.handleFeedback(type, key, feedback); + public void handleFeedback(FeedbackMessage message) { + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + midiDeviceImpl.handleFeedback(message, key, feedback); } } @@ -96,12 +94,12 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac return type; } - // Feedback, abhängig vom Device + // Feedback, depends on MidiDeviceImpl @Override public boolean supportFeedback() { - Device midiDevice = Midi.getInstance().getMidiDevice(); - if (midiDevice != null) { - return midiDevice.supportFeedback(); + MidiDeviceImpl midiMidiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiMidiDeviceImpl != null) { + return midiMidiDeviceImpl.supportFeedback(); } return false; } @@ -117,10 +115,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac @Override public DisplayableFeedbackColor[] getColors() { - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - if (device instanceof DeviceColorAssociatorConnector) { - return ((DeviceColorAssociatorConnector) device).getColors(); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) { + return ((DeviceColorAssociatorConnector) midiDeviceImpl).getColors(); } } return null; @@ -128,10 +126,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac @Override public DisplayableFeedbackColor getDefaultEventColor() { - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - if (device instanceof DeviceColorAssociatorConnector) { - return ((DeviceColorAssociatorConnector) device).getDefaultEventColor(); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) { + return ((DeviceColorAssociatorConnector) midiDeviceImpl).getDefaultEventColor(); } } return null; @@ -139,10 +137,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac @Override public DisplayableFeedbackColor getDefaultStandardColor() { - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - if (device instanceof DeviceColorAssociatorConnector) { - return ((DeviceColorAssociatorConnector) device).getDefaultStandardColor(); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) { + return ((DeviceColorAssociatorConnector) midiDeviceImpl).getDefaultStandardColor(); } } return null; @@ -150,10 +148,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac @Override public DisplayableFeedbackColor map(Color color) { - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - if (device instanceof DeviceColorAssociatorConnector) { - return ((DeviceColorAssociatorConnector) device).map(color); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) { + return ((DeviceColorAssociatorConnector) midiDeviceImpl).map(color); } } return null; diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java index 27e14b3e0fa297cc775151dc5a9ca6972904d039..3d6166845bc94ae06abdea212c583b80cb550343 100644 --- a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java +++ b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java @@ -1,9 +1,8 @@ package de.tobias.playpad.action.mapper; import de.tobias.playpad.Strings; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.midi.Midi; -import de.tobias.utils.ui.icon.FontIconType; import de.tobias.utils.util.Localization; public class MidiMapperFactory extends MapperFactory implements MapperConnectFeedbackable { @@ -24,14 +23,14 @@ public class MidiMapperFactory extends MapperFactory implements MapperConnectFee @Override public void initFeedbackType() { - Device device = Midi.getInstance().getMidiDevice(); - device.initDevice(); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + midiDeviceImpl.initDevice(); } @Override public void clearFeedbackType() { - Device device = Midi.getInstance().getMidiDevice(); - device.clearFeedback(); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + midiDeviceImpl.clearFeedback(); } // TODO Remove diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java b/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java index 85f6ec285db2564fe25d3f0875761c063553413c..906c204db64472f5635ea5585cddbcbb1bdf4459 100644 --- a/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java +++ b/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java @@ -7,7 +7,7 @@ import javax.sound.midi.MidiMessage; import de.tobias.playpad.action.Action; import de.tobias.playpad.action.InputType; import de.tobias.playpad.action.MappingUtils; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.midi.MidiListener; import de.tobias.playpad.project.Project; @@ -43,8 +43,8 @@ public class MidiHandler implements MidiListener { int key = message.getMessage()[1]; // Custom Midi Listener - Device device = midi.getMidiDevice(); - device.onMidiMessage(message); + MidiDeviceImpl midiDeviceImpl = midi.getMidiDevice(); + midiDeviceImpl.onMidiMessage(message); InputType type; if (message.getMessage()[2] != 0) { diff --git a/PlayWall/src/de/tobias/playpad/midi/device/PD12.java b/PlayWall/src/de/tobias/playpad/midi/device/PD12.java index 40c050e4f26906dac9be42609b06c028bc418835..2a214f22b8ef7cab0ff4ff9cab3bfbedfc9cf275 100644 --- a/PlayWall/src/de/tobias/playpad/midi/device/PD12.java +++ b/PlayWall/src/de/tobias/playpad/midi/device/PD12.java @@ -6,11 +6,11 @@ import javax.sound.midi.SysexMessage; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.Feedback; import de.tobias.playpad.action.feedback.FeedbackMessage; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.settings.Profile; import javafx.application.Platform; -public class PD12 extends Device { +public class PD12 extends MidiDeviceImpl { public static final String NAME = "PD 12"; diff --git a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java index 7b86020d48338a34354f0b0ecb63e50aea218aa3..786e783410f226e0b45c9caf82ca51c348b1abca 100644 --- a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java +++ b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java @@ -1,9 +1,5 @@ package de.tobias.playpad.view; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.action.Action; @@ -12,7 +8,7 @@ import de.tobias.playpad.action.mapper.MapperFactory; import de.tobias.playpad.action.mapper.MapperViewController; import de.tobias.playpad.registry.NoSuchComponentException; import de.tobias.playpad.registry.Registry; -import de.tobias.playpad.viewcontroller.IMapperOverviewViewController; +import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController; import de.tobias.utils.ui.icon.FontAwesomeType; import de.tobias.utils.ui.icon.FontIcon; import javafx.scene.Parent; @@ -24,8 +20,12 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + // Diese Klasse zeigt die Mapper zu einer Action an -public class MapperOverviewViewController implements IMapperOverviewViewController { +public class MapperOverviewViewController extends BaseMapperOverviewViewController { private VBox root; private VBox mappingView; diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java index 020656123627b651bbaab676ba9bb2f41cecc0c5..c53586b9b554c74ea028cac160640739c3fe97d7 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java @@ -4,9 +4,8 @@ import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.Strings; import de.tobias.playpad.action.cartaction.CartAction; import de.tobias.playpad.action.cartaction.CartAction.ControlMode; -import de.tobias.playpad.action.mapper.MapperRegistry; import de.tobias.playpad.action.mapper.MapperViewController; -import de.tobias.playpad.viewcontroller.IMapperOverviewViewController; +import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController; import de.tobias.playpad.viewcontroller.cell.EnumCell; import de.tobias.utils.ui.ContentViewController; import javafx.fxml.FXML; @@ -21,7 +20,7 @@ public class CartActionViewController extends ContentViewController { @FXML private CheckBox autoColorCheckbox; @FXML private VBox rootContainer; - private IMapperOverviewViewController mapperOverviewViewController; + private BaseMapperOverviewViewController baseMapperOverviewViewController; private CartAction action; @@ -43,8 +42,8 @@ public class CartActionViewController extends ContentViewController { { action.setAutoFeedbackColors(c); // Disable Feedback Controls bei Automatischen Feedback für VORHANDENE MAPPER - if (mapperOverviewViewController != null) { - mapperOverviewViewController.getControllers().forEach(controller -> + if (baseMapperOverviewViewController != null) { + baseMapperOverviewViewController.getControllers().forEach(controller -> { toggleFeedbackVisablity(action, controller); }); @@ -52,8 +51,8 @@ public class CartActionViewController extends ContentViewController { }); VBox.setVgrow(rootContainer, Priority.ALWAYS); - mapperOverviewViewController = MapperRegistry.getOverviewViewControllerInstance(); - mapperOverviewViewController.addMapperAddListener((mapper, controller) -> + baseMapperOverviewViewController = BaseMapperOverviewViewController.getInstance(); + baseMapperOverviewViewController.addMapperAddListener((mapper, controller) -> { // Disable Feedback Controls bei Automatischen Feedback für NEUE MAPPER die erstellt werden toggleFeedbackVisablity(action, controller); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index 0381d8ee1e7095379b96c6518df7fdff32e165f2..a641fcf2a7b39f18b478f98d86f6af39aebbdec1 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -547,7 +547,7 @@ public class MainViewController extends ViewController implements IMainViewContr // MIDI if (profileSettings.isMidiActive() && profileSettings.getMidiDevice() != null) { - // Load known MIDI Device + // Load known MIDI MidiDeviceImpl Worker.runLater(() -> { loadMidiDevice(profileSettings.getMidiDevice()); @@ -688,10 +688,10 @@ public class MainViewController extends ViewController implements IMainViewContr } /** - * Init MIDI Device by using the Midi Class and show some feedback the user. + * Init MIDI MidiDeviceImpl by using the Midi Class and show some feedback the user. * * @param name - * Device Name + * MidiDeviceImpl Name * * @see Midi#lookupMidiDevice(String) */ diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java index aabd426b60650b0bbfe87f0603e65af054ea5599..4dc94293821a836ae8823a5d9f369b6f6540fb35 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java @@ -10,7 +10,7 @@ import de.tobias.playpad.action.mapper.MapperViewController; import de.tobias.playpad.action.mapper.MidiMapper; import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback; import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.midi.MidiListener; import de.tobias.playpad.viewcontroller.option.feedback.DoubleFeedbackViewController; @@ -133,18 +133,18 @@ public class MidiMapperViewController extends MapperViewController implements Mi midiInputKeyLabel.setText(String.valueOf(mapper.getKey())); - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - if (device.supportFeedback()) { + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + if (midiDeviceImpl.supportFeedback()) { // remove old Elements if (feedbackController != null) { root.getChildren().remove(feedbackController.getParent()); } // add new Elements if (mapper.getFeedbackType() == FeedbackType.SINGLE) { - feedbackController = new SingleFeedbackViewController((SingleMidiFeedback) mapper.getFeedback(), device.getColors()); + feedbackController = new SingleFeedbackViewController((SingleMidiFeedback) mapper.getFeedback(), midiDeviceImpl.getColors()); } else if (mapper.getFeedbackType() == FeedbackType.DOUBLE) { - feedbackController = new DoubleFeedbackViewController((DoubleMidiFeedback) mapper.getFeedback(), device.getColors()); + feedbackController = new DoubleFeedbackViewController((DoubleMidiFeedback) mapper.getFeedback(), midiDeviceImpl.getColors()); } showFeedback(); } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java index a88ef435f74964545185c0beafc8511a630a063e..0403153031e5ab76a098bd319e77f6200d59999a 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java @@ -1,7 +1,5 @@ package de.tobias.playpad.viewcontroller.option.feedback; -import java.util.Optional; - import org.controlsfx.control.PopOver; import org.controlsfx.control.PopOver.ArrowLocation; @@ -9,7 +7,7 @@ import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.FeedbackMessage; import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.view.ColorPickerView; import de.tobias.utils.ui.ContentViewController; @@ -42,14 +40,14 @@ public class DoubleFeedbackViewController extends ContentViewController { super("doubleFeedback", "de/tobias/playpad/assets/view/option/feedback/", PlayPadMain.getUiResourceBundle()); this.feedback = feedback; - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - DisplayableFeedbackColor colorDefault = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + DisplayableFeedbackColor colorDefault = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); if (colorDefault != null) { colorPreviewDefault.setFill(colorDefault.getPaint()); setColorChooseButtonColor(colorDefault.getPaint(), colorChooseDefaultButton); } - DisplayableFeedbackColor colorPlay = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT)); + DisplayableFeedbackColor colorPlay = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT)); if (colorPlay != null) { colorPreviewEvent.setFill(colorPlay.getPaint()); setColorChooseButtonColor(colorPlay.getPaint(), colorChooseEventButton); @@ -74,16 +72,16 @@ public class DoubleFeedbackViewController extends ContentViewController { private void colorChooseButtonHandler(ActionEvent event) { if (colorChooser == null) { colorChooser = new PopOver(); - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - DisplayableFeedbackColor color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + DisplayableFeedbackColor color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); if (event.getSource() == colorChooseDefaultButton) { - color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); + color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); } else if (event.getSource() == colorChooseEventButton) { - color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT)); + color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT)); } - ColorPickerView colorView = new ColorPickerView(color, device.getColors(), item -> + ColorPickerView colorView = new ColorPickerView(color, midiDeviceImpl.getColors(), item -> { colorChooser.hide(); if (item instanceof DisplayableFeedbackColor) { diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java index ab0d032051d5d8424a34e9327cd4a4b11bc506e4..11cd760afac86e4503cd7ddfda6d69e5a75f670a 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java @@ -1,7 +1,6 @@ package de.tobias.playpad.viewcontroller.option.feedback; -import java.util.Optional; - +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import org.controlsfx.control.PopOver; import org.controlsfx.control.PopOver.ArrowLocation; @@ -9,7 +8,6 @@ import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.FeedbackMessage; import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback; -import de.tobias.playpad.action.mididevice.Device; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.view.ColorPickerView; import de.tobias.utils.ui.ContentViewController; @@ -38,9 +36,9 @@ public class SingleFeedbackViewController extends ContentViewController { super("singleFeedback", "de/tobias/playpad/assets/view/option/feedback/", PlayPadMain.getUiResourceBundle()); this.feedback = feedback; - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - DisplayableFeedbackColor colorDefault = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + DisplayableFeedbackColor colorDefault = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); if (colorDefault != null) { colorPreviewDefault.setFill(colorDefault.getPaint()); setColorChooseButtonColor(colorDefault.getPaint(), colorChooseDefaultButton); @@ -60,11 +58,11 @@ public class SingleFeedbackViewController extends ContentViewController { private void colorChooseButtonHandler(ActionEvent event) { if (colorChooser == null) { colorChooser = new PopOver(); - Device device = Midi.getInstance().getMidiDevice(); - if (device != null) { - DisplayableFeedbackColor color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); + MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice(); + if (midiDeviceImpl != null) { + DisplayableFeedbackColor color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD)); - ColorPickerView colorView = new ColorPickerView(color, device.getColors(), item -> + ColorPickerView colorView = new ColorPickerView(color, midiDeviceImpl.getColors(), item -> { colorChooser.hide(); if (item instanceof DisplayableFeedbackColor) { diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java index e177b8f69150ab60c38cc41180595cb5f454439d..ba73394ac013acf6446967f50eb2e38445982dd3 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java @@ -2,7 +2,6 @@ package de.tobias.playpad.viewcontroller.option.profile; import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import de.tobias.playpad.PlayPadMain; @@ -13,12 +12,10 @@ import de.tobias.playpad.action.ActionFactory; import de.tobias.playpad.action.ActionDisplayable; import de.tobias.playpad.action.ActionType; import de.tobias.playpad.action.Mapping; -import de.tobias.playpad.action.mapper.MapperRegistry; 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.IMapperOverviewViewController; +import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController; import de.tobias.playpad.viewcontroller.IMappingTabViewController; import de.tobias.playpad.viewcontroller.cell.DisplayableCell; import de.tobias.playpad.viewcontroller.cell.DisplayableTreeCell; @@ -49,7 +46,7 @@ public class MappingTabViewController extends ProfileSettingsTabViewController i @FXML private VBox detailView; - private IMapperOverviewViewController mapperOverviewViewController; + private BaseMapperOverviewViewController baseMapperOverviewViewController; private Mapping oldMapping; private Mapping mapping; @@ -136,10 +133,10 @@ public class MappingTabViewController extends ProfileSettingsTabViewController i public void showMapperFor(Action action) { try { if (action != null) { - mapperOverviewViewController = MapperRegistry.getOverviewViewControllerInstance(); - mapperOverviewViewController.showAction(action, detailView); + baseMapperOverviewViewController = BaseMapperOverviewViewController.getInstance(); + baseMapperOverviewViewController.showAction(action, detailView); } else { - detailView.getChildren().remove(mapperOverviewViewController.getParent()); + detailView.getChildren().remove(baseMapperOverviewViewController.getParent()); } } catch (Exception e) { e.printStackTrace(); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java index 72c74016cedbc502c0cc82188bbf68b18cfd252e..0eb1711869763258d1cfb1370cb7c4da375857e4 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java @@ -49,7 +49,7 @@ public class MidiTabViewController extends ProfileSettingsTabViewController { }); } - // Midi Device und Presets Choose + // Midi MidiDeviceImpl und Presets Choose @FXML private void deviceHandler(ActionEvent event) { ProfileSettings profilSettings = Profile.currentProfile().getProfileSettings(); diff --git a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java index 9e3a607afc5354e3ec87bac62880a5cdf1d88d43..ae78ea90077bda31b947585210c128c329fda5a7 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java +++ b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java @@ -2,10 +2,15 @@ package de.tobias.playpad.action.mapper; import de.tobias.playpad.action.feedback.FeedbackMessage; +/** + * Implement this interface to enable a mapper to receive feedback from an action + * + * @author tobias + */ public interface MapperFeedbackable { - public abstract boolean supportFeedback(); + boolean supportFeedback(); - public abstract void handleFeedback(FeedbackMessage type); + void handleFeedback(FeedbackMessage message); } \ No newline at end of file diff --git a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java deleted file mode 100644 index ea795f46ebab8df397805d40be37c6a54a737ca2..0000000000000000000000000000000000000000 --- a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.tobias.playpad.action.mapper; - -import de.tobias.playpad.viewcontroller.IMapperOverviewViewController; - -@Deprecated -public class MapperRegistry { - - // TODO New Implementation - private static IMapperOverviewViewController controllerInstance; - - public static void setOverviewViewController(IMapperOverviewViewController controller) { - MapperRegistry.controllerInstance = controller; - } - - public static IMapperOverviewViewController getOverviewViewControllerInstance() { - return controllerInstance; - } -} diff --git a/PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java b/PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java similarity index 89% rename from PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java rename to PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java index 8a55c904fdb5b4d32c5b0dc7c7bbd82f61fd3dcd..19163d64a6ba7a21e52aaac0b42dc528807cfe7c 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java +++ b/PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java @@ -20,9 +20,9 @@ import de.tobias.playpad.midi.device.DeviceRegistry; * * @since 5.0.0 */ -public abstract class Device extends EventDispatcher implements Listener { +public abstract class MidiDeviceImpl extends EventDispatcher implements Listener { - public Device() { + public MidiDeviceImpl() { registerEventListener(this); } @@ -50,7 +50,7 @@ public abstract class Device extends EventDispatcher implements Listener { if (listeners != null) { for (ListenerHandler handler : listeners) { handler.execute(event); - System.out.println("Dispatched Device Event: " + event); + System.out.println("Dispatched MidiDeviceImpl Event: " + event); } } DeviceRegistry.getFactoryInstance().dispatchEvent(event); diff --git a/PlayWallCore/src/de/tobias/playpad/midi/Midi.java b/PlayWallCore/src/de/tobias/playpad/midi/Midi.java index 2b81812afbba0a69cb375178e4f561503a6606e3..470a7d1f1f2167a119445cdce8b421c4a3cd99b4 100644 --- a/PlayWallCore/src/de/tobias/playpad/midi/Midi.java +++ b/PlayWallCore/src/de/tobias/playpad/midi/Midi.java @@ -1,6 +1,6 @@ package de.tobias.playpad.midi; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.midi.device.DeviceRegistry; import javax.sound.midi.*; @@ -10,7 +10,7 @@ public class Midi implements AutoCloseable { private MidiDevice inputDevice; private MidiDevice outputDevice; - private Device midiDeviceImpl; + private MidiDeviceImpl midiMidiDeviceImplImpl; private MidiListener listener; @@ -46,8 +46,8 @@ public class Midi implements AutoCloseable { return outputDevice; } - public Device getMidiDevice() { - return midiDeviceImpl; + public MidiDeviceImpl getMidiDevice() { + return midiMidiDeviceImplImpl; } public void lookupMidiDevice(String name) throws IllegalArgumentException, MidiUnavailableException, NullPointerException { @@ -91,7 +91,7 @@ public class Midi implements AutoCloseable { // Hier wird die DeviceImpl aufgerufen try { - this.midiDeviceImpl = DeviceRegistry.getFactoryInstance().getDevice(input.getName()); + this.midiMidiDeviceImplImpl = DeviceRegistry.getFactoryInstance().getDevice(input.getName()); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } @@ -159,8 +159,8 @@ public class Midi implements AutoCloseable { } public void sendClearCommand() throws InvalidMidiDataException, MidiUnavailableException { - if (midiDeviceImpl != null) { - midiDeviceImpl.clearFeedback(); + if (midiMidiDeviceImplImpl != null) { + midiMidiDeviceImplImpl.clearFeedback(); } } } diff --git a/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java b/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java similarity index 85% rename from PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java rename to PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java index af8a3460898abbd3c1238f6e1839dadcb9d3980a..dd0fdbb5dfcb2863134e5ba8cfb0d91df68d57f6 100644 --- a/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java +++ b/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java @@ -3,9 +3,9 @@ package de.tobias.playpad.midi.device; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.Feedback; import de.tobias.playpad.action.feedback.FeedbackMessage; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; -public class DefaultDevice extends Device { +public class DefaultMidiDeviceImpl extends MidiDeviceImpl { @Override public String getName() { diff --git a/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java b/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java index 67b9b8a796939c1cf497bdc173440baf10e932c6..32c023b34f416b5417eb1c3eba4517263441d797 100644 --- a/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java +++ b/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java @@ -3,7 +3,7 @@ package de.tobias.playpad.midi.device; import java.util.HashMap; import java.util.List; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.event.Event; import de.tobias.playpad.event.EventDispatcher; @@ -25,7 +25,7 @@ public class DeviceRegistry extends EventDispatcher { /** * Speicher für alle Geräte Implementierungen [Produktname, Implementierung] */ - private HashMap<String, Class<? extends Device>> devices = new HashMap<>(); + private HashMap<String, Class<? extends MidiDeviceImpl>> devices = new HashMap<>(); /** * Registriert eine neue Implementierung für ein Midi Gerät @@ -35,9 +35,9 @@ public class DeviceRegistry extends EventDispatcher { * @param device * Implementierung als Klasse, Instanz erstellt das Programm bei bei bedarf */ - public void registerDevice(String id, Class<? extends Device> device) { + public void registerDevice(String id, Class<? extends MidiDeviceImpl> device) { devices.put(id, device); - System.out.println("Register MIDI Device Impl: " + id); + System.out.println("Register MIDI MidiDeviceImpl Impl: " + id); } /** @@ -45,26 +45,26 @@ public class DeviceRegistry extends EventDispatcher { * * @param id * Name des Geräts - * @return Implementierung, DefaultDevice wenn keine vorhanden oder registriert über register + * @return Implementierung, DefaultMidiDeviceImpl wenn keine vorhanden oder registriert über register * @throws InstantiationException * Fehler beim instanzieren * @throws IllegalAccessException * Fehler beim instanzieren * @see DeviceRegistry#registerDevice(String, Class) - * @see DefaultDevice + * @see DefaultMidiDeviceImpl */ - public Device getDevice(String id) throws InstantiationException, IllegalAccessException { + public MidiDeviceImpl getDevice(String id) throws InstantiationException, IllegalAccessException { if (devices.containsKey(id)) { System.out.println("Recognize known MIDI device: " + id); return devices.get(id).newInstance(); } else { System.out.println("Use Default MIDI device"); - return new DefaultDevice(); + return new DefaultMidiDeviceImpl(); } } /** - * Instanz der Device Component + * Instanz der MidiDeviceImpl Component * * @return instance */ diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java new file mode 100644 index 0000000000000000000000000000000000000000..189bbad09970693c22901ae9b628eb1fcf0050de --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java @@ -0,0 +1,41 @@ +package de.tobias.playpad.viewcontroller; + +import java.util.List; +import java.util.ResourceBundle; + +import de.tobias.playpad.action.Action; +import de.tobias.playpad.action.mapper.Mapper; +import de.tobias.playpad.action.mapper.MapperViewController; +import de.tobias.utils.ui.ContentViewController; +import javafx.scene.Parent; +import javafx.scene.control.ScrollPane; +import javafx.scene.layout.Pane; + +public abstract class BaseMapperOverviewViewController { + + private static BaseMapperOverviewViewController instance; + + public static BaseMapperOverviewViewController getInstance() { + return instance; + } + + public static void setInstance(BaseMapperOverviewViewController instance) { + BaseMapperOverviewViewController.instance = instance; + } + + public interface MapperAddListener { + + void onAdd(Mapper mapper, MapperViewController controller); + } + + public abstract List<MapperViewController> getControllers(); + + public abstract void addMapperAddListener(MapperAddListener addListener); + + public abstract void showAction(Action action, Pane parent); + + public abstract void showAction(Action action, ScrollPane parent); + + public abstract Parent getParent(); + +} \ No newline at end of file diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java deleted file mode 100644 index b548e8ab44a701ecc330d07e7f198d57aaaec9ad..0000000000000000000000000000000000000000 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.tobias.playpad.viewcontroller; - -import java.util.List; - -import de.tobias.playpad.action.Action; -import de.tobias.playpad.action.mapper.Mapper; -import de.tobias.playpad.action.mapper.MapperViewController; -import javafx.scene.Parent; -import javafx.scene.control.ScrollPane; -import javafx.scene.layout.Pane; - -public interface IMapperOverviewViewController { - - public static interface MapperAddListener { - - public void onAdd(Mapper mapper, MapperViewController controller); - } - - public List<MapperViewController> getControllers(); - - public void addMapperAddListener(MapperAddListener addListener); - - public void showAction(Action action, Pane parent); - - public void showAction(Action action, ScrollPane parent); - - public Parent getParent(); - -} \ No newline at end of file diff --git a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java index 389b2ab772f3d47d0d62e3f20cf0ba05cfead83e..7d8f920ed542b5b981e6c69e0ab88646c1494328 100644 --- a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java +++ b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java @@ -10,13 +10,13 @@ import javax.sound.midi.ShortMessage; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.Feedback; import de.tobias.playpad.action.feedback.FeedbackMessage; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector; import de.tobias.playpad.launchpadplugin.impl.MapParser; import de.tobias.playpad.midi.Midi; import javafx.scene.paint.Color; -public class LaunchPadMK2 extends Device implements DeviceColorAssociatorConnector { +public class LaunchPadMK2 extends MidiDeviceImpl implements DeviceColorAssociatorConnector { public static final String NAME = "Launchpad MK2"; diff --git a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java index 693d49e063b5beac6f5b8565ffbbc1e19875d03f..fa6ced16276e828f4787fb6c38b0dd7559eed62d 100644 --- a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java +++ b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java @@ -6,12 +6,12 @@ import javax.sound.midi.MidiUnavailableException; import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; import de.tobias.playpad.action.feedback.Feedback; import de.tobias.playpad.action.feedback.FeedbackMessage; -import de.tobias.playpad.action.mididevice.Device; +import de.tobias.playpad.action.mididevice.MidiDeviceImpl; import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector; import de.tobias.playpad.midi.Midi; import javafx.scene.paint.Color; -public class LaunchPadS extends Device implements DeviceColorAssociatorConnector { +public class LaunchPadS extends MidiDeviceImpl implements DeviceColorAssociatorConnector { public static final String NAME = "Launchpad S";