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 cdc05e376046c786b0040e53573933f7eef7f0a6..76da608d457544218a68030a9677139781f6aa83 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties @@ -16,7 +16,6 @@ main.menuitem.profile=Profile verwalten... main.menuitem.print=Drucken... main.menuitem.onTop=Fenster im Vordergrund main.menuitem.plugins=Erweiterungen... -main.menuitem.dnd=Bearbeitungsmodus main.menuitem.errors=Fehlerbericht anzeigen... main.menuitem.projectSettings=Projekteinstellungen... main.menuitem.profileSettings=Profileinstellungen... diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml index dd7c7d2aa525e7b2093debec88e177d3f3cdc92f..4596aa8d1aba7628ed36e39fbc146a383b7228b0 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml @@ -39,11 +39,6 @@ </Menu> <Menu mnemonicParsing="false" text="%main.menu.option"> <items> - <CheckMenuItem fx:id="dndModeMenuItem" mnemonicParsing="false" onAction="#dndModeHandler" text="%main.menuitem.dnd"> - <accelerator> - <KeyCodeCombination alt="UP" code="M" control="UP" meta="UP" shift="UP" shortcut="DOWN" /> - </accelerator> - </CheckMenuItem> <MenuItem fx:id="errorMenu" mnemonicParsing="false" onAction="#errorMenuHandler" text="%main.menuitem.errors"> <accelerator> <KeyCodeCombination alt="UP" code="E" control="UP" meta="UP" shift="UP" shortcut="DOWN" /> diff --git a/PlayWall/src/de/tobias/playpad/components/Keys.xml b/PlayWall/src/de/tobias/playpad/components/Keys.xml index d5f0239e01f66870f30a2311003816151f3532af..603df4417aabacddf62d4d51858503bba6d1b5b9 100644 --- a/PlayWall/src/de/tobias/playpad/components/Keys.xml +++ b/PlayWall/src/de/tobias/playpad/components/Keys.xml @@ -6,7 +6,6 @@ <Key id="save_proj" name="main.menuitem.save" key="S" ctrl="true" alt="false" meta="false" shift="false"/> <Key id="print_proj" name="main.menuitem.print" key="P" ctrl="true" alt="false" meta="false" shift="false"/> - <Key id="dnd" name="main.menuitem.dnd" key="M" ctrl="true" alt="false" meta="false" shift="false"/> <Key id="errors" name="main.menuitem.errors" key="E" ctrl="true" alt="false" meta="false" shift="false"/> <Key id="plugins" name="main.menuitem.plugins"/> <Key id="project_settings" name="main.menuitem.projectSettings" key="Comma" ctrl="true" alt="true" meta="false" shift="false"/> @@ -23,7 +22,6 @@ <Key id="save_proj" name="main.menuitem.save" key="S" ctrl="false" alt="false" meta="true" shift="false"/> <Key id="print_proj" name="main.menuitem.print" key="P" ctrl="false" alt="false" meta="true" shift="false"/> - <Key id="dnd" name="main.menuitem.dnd" key="M" ctrl="false" alt="false" meta="true" shift="false"/> <Key id="errors" name="main.menuitem.errors" key="E" ctrl="false" alt="false" meta="true" shift="false"/> <Key id="plugins" name="main.menuitem.plugins"/> <Key id="project_settings" name="main.menuitem.projectSettings" key="Comma" ctrl="false" alt="true" meta="true" shift="false"/> diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java new file mode 100644 index 0000000000000000000000000000000000000000..ae58ecf802afaea4b891fcc52ac8efd7b0afafb9 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java @@ -0,0 +1,7 @@ +package de.tobias.playpad.layout.desktop; + +public enum DesktopEditMode { + PLAY, + DRAG, + COLOR; +} diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java index 9d9b3657b2436e236cf07934870d735adbc84ee4..0d1c754dd79d7a6759f36a893103004e41b507ed 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java @@ -21,6 +21,7 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { private static final String TYPE = "Desktop"; private DesktopMenuToolbarViewController desktopMenuToolbarViewController; + private DesktopEditMode editMode = DesktopEditMode.PLAY; private Stack<IPadView> recyclingStack; @@ -41,7 +42,7 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { @Override public MenuToolbarViewController createMenuToolbar(IMainViewController mainViewRef) { if (desktopMenuToolbarViewController == null) { - desktopMenuToolbarViewController = new DesktopMenuToolbarViewController(mainViewRef); + desktopMenuToolbarViewController = new DesktopMenuToolbarViewController(mainViewRef, this); } return desktopMenuToolbarViewController; } @@ -51,7 +52,7 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { if (!recyclingStack.isEmpty()) { return recyclingStack.pop(); } - return new DesktopPadView(); + return new DesktopPadView(this); } @Override @@ -64,4 +65,11 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { return null; } + public DesktopEditMode getEditMode() { + return editMode; + } + + public void setEditMode(DesktopEditMode editMode) { + this.editMode = editMode; + } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index d130626ee700e48dae98cd463ce9d097000b2567..34ee58d90c6c8e78eb2720fb712e43060a04079b 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -8,6 +8,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import org.controlsfx.control.SegmentedButton; import org.controlsfx.control.textfield.TextFields; import de.tobias.playpad.AppUserInfoStrings; @@ -43,11 +44,12 @@ import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.global.GlobalSettingsViewController; import de.tobias.playpad.viewcontroller.option.profile.ProfileSettingsViewController; import de.tobias.playpad.viewcontroller.option.project.ProjectSettingsViewController; -import de.tobias.playpad.viewcontroller.pad.PadDragListener; import de.tobias.utils.application.ApplicationInfo; import de.tobias.utils.application.ApplicationUtils; import de.tobias.utils.application.container.PathType; import de.tobias.utils.ui.Alertable; +import de.tobias.utils.ui.icon.FontAwesomeType; +import de.tobias.utils.ui.icon.FontIcon; import de.tobias.utils.ui.scene.NotificationPane; import de.tobias.utils.util.Localization; import de.tobias.utils.util.Worker; @@ -69,6 +71,7 @@ import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; import javafx.scene.control.TextField; +import javafx.scene.control.ToggleButton; import javafx.scene.input.KeyCombination; import javafx.scene.layout.HBox; import javafx.stage.Modality; @@ -85,7 +88,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro @FXML protected MenuItem profileMenu; @FXML protected MenuItem printProjectMenuItem; - @FXML protected CheckMenuItem dndModeMenuItem; @FXML protected MenuItem errorMenu; @FXML protected MenuItem pluginMenu; @@ -107,13 +109,16 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro private IMainViewController mainViewController; - private ProjectSettingsViewController projectSettingsViewController; - private ProfileSettingsViewController profileSettingsViewController; - private GlobalSettingsViewController globalSettingsViewController; + private transient ProjectSettingsViewController projectSettingsViewController; + private transient ProfileSettingsViewController profileSettingsViewController; + private transient GlobalSettingsViewController globalSettingsViewController; - public DesktopMenuToolbarViewController(IMainViewController controller) { + private DesktopMainLayoutConnect connect; + + public DesktopMenuToolbarViewController(IMainViewController controller, DesktopMainLayoutConnect connect) { super("header", "de/tobias/playpad/assets/view/main/desktop/", PlayPadMain.getUiResourceBundle()); this.mainViewController = controller; + this.connect = connect; initLayoutMenu(); } @@ -130,6 +135,37 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro // Help Menu --> HIDDEN TODO helpMenu.setVisible(false); helpMenu.getItems().add(new HelpMenuItem(helpMenu)); + + // Edit Mode Buttons + SegmentedButton editButtons = new SegmentedButton(); + ToggleButton playButton = new ToggleButton("", new FontIcon(FontAwesomeType.HAND_ALT_LEFT)); + playButton.setFocusTraversable(false); + ToggleButton dragButton = new ToggleButton("", new FontIcon(FontAwesomeType.ARROWS)); + dragButton.setFocusTraversable(false); + ToggleButton colorButton = new ToggleButton("", new FontIcon(FontAwesomeType.PENCIL)); + colorButton.setFocusTraversable(false); + editButtons.getButtons().addAll(playButton, dragButton, colorButton); + editButtons.getToggleGroup().selectedToggleProperty().addListener((a, b, c) -> + { + if (b == dragButton) { + for (IPadView view : mainViewController.getPadViews()) { + view.enableDragAndDropDesignMode(false); + } + } + + if (c == playButton) { + connect.setEditMode(DesktopEditMode.PLAY); + } else if (c == dragButton) { + connect.setEditMode(DesktopEditMode.DRAG); + System.out.println("Drag"); + for (IPadView view : mainViewController.getPadViews()) { + view.enableDragAndDropDesignMode(true); + } + } else if (c == colorButton) { + connect.setEditMode(DesktopEditMode.COLOR); + } + }); + iconHbox.getChildren().add(editButtons); } private void initLayoutMenu() { @@ -203,7 +239,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro setKeyBindingForMenu(saveProjectMenuItem, keys.getKey("save_proj")); setKeyBindingForMenu(printProjectMenuItem, keys.getKey("print_proj")); - setKeyBindingForMenu(dndModeMenuItem, keys.getKey("dnd")); setKeyBindingForMenu(errorMenu, keys.getKey("errors")); setKeyBindingForMenu(pluginMenu, keys.getKey("plugins")); setKeyBindingForMenu(projectSettingsMenuItem, keys.getKey("project_settings")); @@ -219,7 +254,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro saveProjectMenuItem.setDisable(false); printProjectMenuItem.setDisable(false); - dndModeMenuItem.setDisable(false); errorMenu.setDisable(false); pluginMenu.setDisable(false); projectSettingsMenuItem.setDisable(false); @@ -233,7 +267,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro @Override public void setLocked(boolean looked) { - dndModeMenuItem.setDisable(looked); + // TODO Lock Edit Buttons } @Override @@ -276,7 +310,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro saveProjectMenuItem.setDisable(true); printProjectMenuItem.setDisable(true); - dndModeMenuItem.setDisable(true); errorMenu.setDisable(true); pluginMenu.setDisable(true); projectSettingsMenuItem.setDisable(true); @@ -287,13 +320,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro alwaysOnTopItem.setDisable(true); searchPadMenuItem.setDisable(true); - // Disable Drag Mode wenn aktiv und diese Toolbar deaktiviert wird. - if (dndModeMenuItem.isSelected()) { - PadDragListener.setDndMode(false); - for (IPadView view : mainViewController.getPadViews()) { - view.enableDragAndDropDesignMode(false); - } - } + connect.setEditMode(DesktopEditMode.PLAY); // TODO -> Button Mit wecheln } @Override @@ -320,7 +347,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro newNode.getStyleClass().add(CURRENT_PAGE_BUTTON); currentPage = index; - if (newNode instanceof Button && dndModeMenuItem.isSelected()) { // Nur bei Drag And Drop mode + if (newNode instanceof Button && connect.getEditMode() == DesktopEditMode.DRAG) { // Nur bei Drag And Drop mode Button button = (Button) newNode; DesktopButtonEditView editBox = new DesktopButtonEditView(openProject.getPage(index), button); button.setGraphic(editBox); @@ -410,29 +437,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro dialog.getStage().show(); } - @FXML - void dndModeHandler(ActionEvent event) { - if (dndModeMenuItem.isSelected()) { - GlobalSettings settings = PlayPadPlugin.getImplementation().getGlobalSettings(); - Project currentProject = PlayPadMain.getProgramInstance().getCurrentProject(); - - if (settings.isLiveMode() && settings.isLiveModeDrag() && currentProject.getActivePlayers() == 0) { - PadDragListener.setDndMode(true); - for (IPadView view : mainViewController.getPadViews()) { - view.enableDragAndDropDesignMode(true); - } - } - } else { - PadDragListener.setDndMode(false); - for (IPadView view : mainViewController.getPadViews()) { - view.enableDragAndDropDesignMode(false); - } - } - - // Damit werden Page Buttons editierbar (die 3 Button vom DesktopButtonEditView) - highlightPageButton(currentPage); - } - @FXML void errorMenuHandler(ActionEvent event) { ErrorSummaryDialog.getInstance().getStage().show(); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadDragListener.java similarity index 91% rename from PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java rename to PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadDragListener.java index 814032b715b6e22f7c8ba572ae00f3080cbaf32e..de4d05aac2bcdd4f8551172c691bdb5563611b97 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadDragListener.java @@ -1,4 +1,4 @@ -package de.tobias.playpad.viewcontroller.pad; +package de.tobias.playpad.layout.desktop; import java.io.File; import java.io.IOException; @@ -31,12 +31,12 @@ import javafx.scene.input.TransferMode; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; -public class PadDragListener { +public class DesktopPadDragListener { private Pad sourcePad; final private Pane view; - private static boolean dndMode; + private DesktopMainLayoutConnect connect; private static Project project; private PadDragOptionView padHud; @@ -44,8 +44,10 @@ public class PadDragListener { private static DataFormat dataFormat = new DataFormat("de.tobias.playpad.padindex"); - public PadDragListener(Pad pad, IPadView view) { + public DesktopPadDragListener(Pad pad, IPadView view, DesktopMainLayoutConnect connect) { this.sourcePad = pad; + this.connect = connect; + this.view = view.getRootNode(); // Drag and Drop @@ -157,7 +159,7 @@ public class PadDragListener { PadIndex padID = (PadIndex) db.getContent(dataFormat); // TODO Check Cast PadDragMode mode = padHud.getSelectedPadDragMode(); - + mode.handle(padID, sourcePad.getPadIndex(), project); padHud.hide(); @@ -170,7 +172,7 @@ public class PadDragListener { } private void dragDetacted(MouseEvent event) { - if (dndMode) { + if (connect.getEditMode() == DesktopEditMode.DRAG) { GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings(); if (sourcePad.getProject() != null) { @@ -202,23 +204,8 @@ public class PadDragListener { } } - /** - * Aktiviert den Drag And Drop Modus für Kacheln. Diese Methode muss vom Menu / KeyShortcut aufgerufen werden. - * - * @param dndMode - * <code>true</code> Aktiv - */ - public static void setDndMode(boolean dndMode) { - PadDragListener.dndMode = dndMode; - } - - @Deprecated - public void setPad(Pad pad) { - this.sourcePad = pad; - } - public static void setProject(Project project) { - PadDragListener.project = project; + DesktopPadDragListener.project = project; } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadView.java index 72d74d982d3b7465e7abe24e6b4c0a58774e56ea..70203abd4c88ae25872c48c819f1dc8bc62d531e 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadView.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadView.java @@ -56,9 +56,9 @@ public class DesktopPadView implements IPadView { private BusyView busyView; private transient DesktopPadViewController controller; // Reference to its controller - - public DesktopPadView() { - controller = new DesktopPadViewController(this); + + public DesktopPadView(DesktopMainLayoutConnect connect) { + controller = new DesktopPadViewController(this, connect); setupView(); } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java index 0384a296e54b07d84224036dd1865e53d0717f57..f22e6f26b68b84b0e792d905415526c4432545c5 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java @@ -29,7 +29,6 @@ import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.FileDragOptionView; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.pad.PadSettingsViewController; -import de.tobias.playpad.viewcontroller.pad.PadDragListener; import de.tobias.utils.application.ApplicationUtils; import de.tobias.utils.util.FileUtils; import de.tobias.utils.util.Localization; @@ -57,10 +56,13 @@ public class DesktopPadViewController implements IPadViewController, EventHandle private PadDurationListener padDurationListener; private IPadPositionListener padPositionListener; - private PadDragListener padDragListener; + private DesktopPadDragListener padDragListener; - public DesktopPadViewController(DesktopPadView padView) { + private DesktopMainLayoutConnect connect; + + public DesktopPadViewController(DesktopPadView padView, DesktopMainLayoutConnect connect) { this.padView = padView; + this.connect = connect; padLockedListener = new PadLockedListener(this); padStatusListener = new PadStatusListener(this); @@ -109,7 +111,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle padContentListener.changed(null, null, pad.getContent()); // Add Duration listener padStatusListener.changed(null, null, pad.getStatus()); - padDragListener = new PadDragListener(pad, padView); + padDragListener = new DesktopPadDragListener(pad, padView, connect); } catch (Exception e) { e.printStackTrace(); } @@ -393,7 +395,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle return padDurationListener; } - public PadDragListener getPadDragListener() { + public DesktopPadDragListener getPadDragListener() { return padDragListener; } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/PageButtonDragHandler.java b/PlayWall/src/de/tobias/playpad/layout/desktop/PageButtonDragHandler.java index 64b67e7204d8d147366d572b64b8d2b2954da50b..3043e41a3c33b0e17a1273fe906003b85d4eaf64 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/PageButtonDragHandler.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/PageButtonDragHandler.java @@ -4,6 +4,13 @@ import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.event.EventHandler; import javafx.scene.input.DragEvent; +/** + * Drag and Drop eines Pads auf ein Page Button (umschalten auf neue Page), wird im DesktopMenuToolbarController verwaltet. + * + * @author tobias + * + * @since 5.1.0 + */ public class PageButtonDragHandler implements EventHandler<DragEvent> { private IMainViewController controller; diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchPadViewController.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchPadViewController.java index 11ef9044b35d086c2f6dbcce2d21a24b8714d7e4..92f038f0c0dbb8590e79de5fbd415754aa3221b5 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchPadViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchPadViewController.java @@ -14,7 +14,6 @@ import de.tobias.playpad.pad.view.IPadView; import de.tobias.playpad.pad.viewcontroller.IPadViewController; import de.tobias.playpad.settings.Profile; import de.tobias.playpad.settings.ProfileSettings; -import de.tobias.playpad.viewcontroller.pad.PadDragListener; import javafx.beans.value.ChangeListener; import javafx.event.Event; import javafx.event.EventHandler; @@ -37,8 +36,6 @@ public class TouchPadViewController implements IPadViewController, EventHandler< private PadDurationListener padDurationListener; private IPadPositionListener padPositionListener; - private PadDragListener padDragListener; - public TouchPadViewController(TouchPadView padView) { this.padView = padView; @@ -91,8 +88,6 @@ public class TouchPadViewController implements IPadViewController, EventHandler< // Duration // listener padStatusListener.changed(null, null, pad.getStatus()); - - padDragListener = new PadDragListener(pad, padView); } catch (Exception e) { e.printStackTrace(); } @@ -122,14 +117,12 @@ public class TouchPadViewController implements IPadViewController, EventHandler< durationable.positionProperty().removeListener(padPositionListener); } pad.setController(null); - padDragListener = null; // GUI Cleaning padPositionListener.stopWaning(); padView.removeStyleClasses(); } - this.padDragListener = null; this.pad = null; } @@ -232,8 +225,4 @@ public class TouchPadViewController implements IPadViewController, EventHandler< public ChangeListener<Duration> getPadDurationListener() { return padDurationListener; } - - public PadDragListener getPadDragListener() { - return padDragListener; - } } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index b260afc55ff730a6f5126a9ac2fa592223e1b485..ccbc3fe9c5896b0021c98717f8d113a236289f28 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -15,6 +15,7 @@ import de.tobias.playpad.action.mapper.listener.KeyboardHandler; import de.tobias.playpad.action.mapper.listener.MidiHandler; import de.tobias.playpad.design.GlobalDesign; import de.tobias.playpad.layout.desktop.DesktopMainLayoutConnect; +import de.tobias.playpad.layout.desktop.DesktopPadDragListener; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.midi.MidiListener; import de.tobias.playpad.pad.Pad; @@ -34,7 +35,6 @@ import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.view.main.MainLayoutHandler; import de.tobias.playpad.viewcontroller.dialog.ErrorSummaryDialog; import de.tobias.playpad.viewcontroller.dialog.SaveDialog; -import de.tobias.playpad.viewcontroller.pad.PadDragListener; import de.tobias.utils.ui.BasicControllerSettings; import de.tobias.utils.ui.NotificationHandler; import de.tobias.utils.ui.ViewController; @@ -386,7 +386,7 @@ public class MainViewController extends ViewController implements IMainViewContr midiHandler.setProject(project); keyboardHandler.setProject(project); - PadDragListener.setProject(project); + DesktopPadDragListener.setProject(project); ErrorSummaryDialog.getInstance().setProject(openProject); menuToolbarViewController.setOpenProject(openProject); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadViewController.java deleted file mode 100644 index 47372327084c09e2b17c49f972f6956a1e89f1f6..0000000000000000000000000000000000000000 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadViewController.java +++ /dev/null @@ -1,395 +0,0 @@ -package de.tobias.playpad.viewcontroller.pad; - -import java.io.File; -import java.nio.file.Path; - -import de.tobias.playpad.PlayPadPlugin; -import de.tobias.playpad.PseudoClasses; -import de.tobias.playpad.pad.Pad; -import de.tobias.playpad.pad.PadStatus; -import de.tobias.playpad.pad.TimeMode; -import de.tobias.playpad.pad.conntent.PadContent; -import de.tobias.playpad.pad.conntent.PadContentConnect; -import de.tobias.playpad.pad.conntent.play.Durationable; -import de.tobias.playpad.pad.listener.IPadPositionListener; -import de.tobias.playpad.pad.listener.PadContentListener; -import de.tobias.playpad.pad.listener.PadDurationListener; -import de.tobias.playpad.pad.listener.PadLockedListener; -import de.tobias.playpad.pad.listener.PadPositionListener; -import de.tobias.playpad.pad.listener.PadStatusListener; -import de.tobias.playpad.pad.view.IPadViewController; -import de.tobias.playpad.registry.NoSuchComponentException; -import de.tobias.playpad.settings.Profile; -import de.tobias.playpad.settings.ProfileSettings; -import de.tobias.playpad.view.PadView; -import de.tobias.playpad.viewcontroller.IPadView; -import de.tobias.playpad.viewcontroller.main.IMainViewController; -import de.tobias.playpad.viewcontroller.option.pad.PadSettingsViewController; -import de.tobias.utils.util.FileUtils; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; -import javafx.stage.Stage; -import javafx.util.Duration; - -public class PadViewController implements EventHandler<ActionEvent>, IPadViewController { - - private static final String DURATION_FORMAT = "%d:%02d"; - private static final String OPEN_FOLDER = "openFolder"; - - private PadView view; - private Pad pad; - - private PadLockedListener padLockedListener; - private PadStatusListener padStatusListener; - private PadContentListener padContentListener; - private PadDurationListener padDurationListener; - private PadPositionListener padPositionListener; - - private PadDragListener padDragListener; - private transient PadSettingsViewController padSettingsViewController; - - public PadViewController() { - view = new PadView(this); - - // TODO Disable this - /*padLockedListener = new PadLockedListener(this); - padStatusListener = new PadStatusListener(this); - padContentListener = new PadContentListener(this); - padDurationListener = new PadDurationListener(this); - padPositionListener = new PadPositionListener(this);*/ - - // Listener muss nur einmal hier hinzugefügt werden, weil bei einem neuen Profile, werden neue PadViewController erzeugt - ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings(); - profileSettings.lockedProperty().addListener(padLockedListener); - } - - @Override - public IPadView getParent() { - return view; - } - - @Override - public void handle(ActionEvent event) { - if (event.getSource() == view.getPlayButton()) { - onPlay(); - } else if (event.getSource() == view.getPauseButton()) { - onPause(); - } else if (event.getSource() == view.getStopButton()) { - onStop(); - } else if (event.getSource() == view.getNewButton()) { - onNew(event); - } else if (event.getSource() == view.getSettingsButton()) { - onSettings(); - } - } - - private void onPlay() { - if (pad.getContent() != null) { - pad.setStatus(PadStatus.PLAY); - } - } - - private void onPause() { - if (pad.getContent() != null) { - pad.setStatus(PadStatus.PAUSE); - } - } - - private void onStop() { - if (pad.getContent() != null) { - pad.setStatus(PadStatus.STOP); - } - } - - private void onNew(ActionEvent event) { -// ProfileSettings settings = Profile.currentProfile().getProfileSettings(); -// if (pad.getProject() != null) { -// if (settings.isLiveMode() && settings.isLiveModeFile() && pad.getProject().getPlayedPlayers() > 0) { -// PlayPadPlugin.getImplementation().getMainViewController().showLiveInfo(); -// return; -// } -// } -// -// FileChooser chooser = new FileChooser(); -// -// // File Extension -// ExtensionFilter extensionFilter = new ExtensionFilter(Localization.getString(Strings.File_Filter_Media), -// PadContentRegistry.getSupportedFileTypes()); -// chooser.getExtensionFilters().add(extensionFilter); -// -// // Last Folder -// Object openFolder = ApplicationUtils.getApplication().getUserDefaults().getData(OPEN_FOLDER); -// if (openFolder != null) { -// File folder = new File(openFolder.toString()); -// chooser.setInitialDirectory(folder); -// } -// -// File file = chooser.showOpenDialog(((Node) event.getTarget()).getScene().getWindow()); -// if (file != null) { -// Path path = file.toPath(); -// -// try { -// Set<PadContentConnect> connects = PadContentRegistry.getPadContentConnectsForFile(file.toPath()); -// if (!connects.isEmpty()) { -// if (connects.size() > 1) { -// FileDragOptionView hud = new FileDragOptionView(view); -// hud.showDropOptions(connects, connect -> -// { -// if (connect != null) { -// setNewPadContent(file, path, connect); -// hud.hide(); -// } -// }); -// } else { -// PadContentConnect connect = connects.iterator().next(); -// setNewPadContent(file, path, connect); -// } -// } -// } catch (UnkownPadContentException e) { -// e.printStackTrace(); -// } -// -// ApplicationUtils.getApplication().getUserDefaults().setData(OPEN_FOLDER, path.getParent().toString()); -// } - } - - private void setNewPadContent(File file, Path path, PadContentConnect connect) { - PadContent content = pad.getContent(); - if (pad.getContent() == null || !pad.getContent().getType().equals(connect.getType())) { - content = connect.newInstance(pad); - this.pad.setContent(content); - } - - try { - content.handlePath(file.toPath()); - } catch (NoSuchComponentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - this.pad.setName(FileUtils.getFilenameWithoutExtention(path.getFileName())); - } - - private void onSettings() { - ProfileSettings settings = Profile.currentProfile().getProfileSettings(); - IMainViewController mvc = PlayPadPlugin.getImplementation().getMainViewController(); - - if (mvc != null) { - if (pad.getProject() != null) { - if (settings.isLiveMode() && settings.isLiveModeSettings() && pad.getProject().getPlayedPlayers() > 0) { - mvc.showLiveInfo(); - return; - } - } - - Stage owner = mvc.getStage(); - if (padSettingsViewController == null) { - padSettingsViewController = new PadSettingsViewController(pad, owner); - padSettingsViewController.getStage().setOnHiding(ev -> - { - if (view != null && pad != null) - view.setTriggerLabelActive(pad.hasTriggerItems()); - }); - } - padSettingsViewController.getStage().show(); - } - } - - @Override - public void unconnectPad() { - view.getIndexLabel().setText(""); - view.clearPreviewContent(); - view.getTimeLabel().setText(""); - - view.setTriggerLabelActive(false); - - view.getLoopLabel().visibleProperty().unbind(); - - if (pad != null) { - pad.contentProperty().removeListener(padContentListener); - pad.statusProperty().removeListener(padStatusListener); - - if (pad.getContent() instanceof Durationable) { - Durationable durationable = (Durationable) pad.getContent(); - durationable.durationProperty().removeListener(padDurationListener); - durationable.positionProperty().removeListener(padPositionListener); - } - pad.setController(null); - padDragListener = null; - - // GUI Cleaning - getPadPositionListener().stopWaning(); - view.removeStyleClasses(pad); - } - this.pad = null; - } - - @Override - public Pad getPad() { - return pad; - } - - @Override - public void setPad(Pad pad) { - unconnectPad(); - - this.pad = pad; - - view.setPreviewContent(pad); - view.addStyleClasses(pad); - - connectPad(); - } - - @Override - public void connectPad() { -// pad.setController(this); TODO - - try { - // Settings - view.getIndexLabel().setText(String.valueOf(pad.getIndexReadable())); - view.getLoopLabel().visibleProperty().bind(pad.loopProperty()); - - view.setTriggerLabelActive(pad.hasTriggerItems()); - - // Update Listener - padContentListener.setPad(pad); - padPositionListener.setPad(pad); - - // Pad Content Chnage - pad.contentProperty().addListener(padContentListener); - // Pad Status Change - pad.statusProperty().addListener(padStatusListener); - - // First Listener call with new data - padContentListener.changed(null, null, pad.getContent()); // Add Duration listener - padStatusListener.changed(null, null, pad.getStatus()); - -// padDragListener = new PadDragListener(pad, view); TODO - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void updateTimeLabel() { - if (pad.getContent() != null && pad.getStatus() != PadStatus.EMPTY && pad.getStatus() != PadStatus.ERROR) { - if (pad.getContent() instanceof Durationable) { - Durationable durationable = (Durationable) pad.getContent(); - - Duration duration = durationable.getDuration(); - Duration position = durationable.getPosition(); - - if (duration != null) { - // Nur Gesamtzeit anzeigen - if (pad.getStatus() == PadStatus.READY || position == null) { - String time = durationToString(duration); - view.getTimeLabel().setText(time); - view.getPlayBar().setProgress(0); - } else { - // Play/Gesamtzeit anzeigen - TimeMode timeMode = pad.getTimeMode(); - - if (timeMode == TimeMode.REST) { - Duration leftTime = duration.subtract(position); - - view.getTimeLabel().setText("- " + durationToString(leftTime)); - } else if (timeMode == TimeMode.PLAYED) { - view.getTimeLabel().setText(durationToString(position)); - } else if (timeMode == TimeMode.BOTH) { - String time = durationToString(position); - String totalTime = durationToString(duration); - - view.getTimeLabel().setText(time + "/" + totalTime); - } - } - } - return; - } - } - view.getPlayBar().setProgress(0); - view.getTimeLabel().setText(""); - } - - public String durationToString(Duration value) { - if (value != null) { - int secounds = (int) ((value.toMillis() / 1000) % 60); - int minutes = (int) ((value.toMillis() / (1000 * 60)) % 60); - String time = String.format(DURATION_FORMAT, minutes, secounds); - return time; - } else { - return null; - } - } - - public void updateButtonDisable() { - if (pad == null) { - return; - } - if (pad.getContent() != null) { - if (pad.getStatus() == PadStatus.PLAY) { - view.getPlayButton().setDisable(true); - view.getPauseButton().setDisable(false); - view.getStopButton().setDisable(false); - view.getNewButton().setDisable(true); - view.getSettingsButton().setDisable(false); - } else if (pad.getStatus() == PadStatus.PAUSE) { - view.getPlayButton().setDisable(false); - view.getPauseButton().setDisable(true); - view.getStopButton().setDisable(false); - view.getNewButton().setDisable(true); - view.getSettingsButton().setDisable(false); - } else if (pad.getStatus() == PadStatus.STOP) { - view.getPlayButton().setDisable(false); - view.getPauseButton().setDisable(true); - view.getStopButton().setDisable(true); - view.getNewButton().setDisable(true); - view.getSettingsButton().setDisable(false); - } else if (pad.getStatus() == PadStatus.READY) { - view.getPlayButton().setDisable(false); - view.getPauseButton().setDisable(true); - view.getStopButton().setDisable(true); - view.getNewButton().setDisable(false); - view.getSettingsButton().setDisable(false); - } else if (pad.getStatus() == PadStatus.ERROR) { - view.getPlayButton().setDisable(true); - view.getPauseButton().setDisable(true); - view.getStopButton().setDisable(true); - view.getNewButton().setDisable(false); - view.getSettingsButton().setDisable(false); - } - } else if (pad.getStatus() == PadStatus.EMPTY || pad.getStatus() == PadStatus.ERROR || pad.getContent() == null - || !pad.getContent().isPadLoaded()) { - view.getPlayButton().setDisable(true); - view.getPauseButton().setDisable(true); - view.getStopButton().setDisable(true); - view.getNewButton().setDisable(false); - view.getSettingsButton().setDisable(false); - } - - if (Profile.currentProfile().getProfileSettings().isLocked()) { - view.getNewButton().setDisable(true); - view.getSettingsButton().setDisable(true); - } - } - - @Override - public void showDnDLayout(boolean b) { - view.pseudoClassState(PseudoClasses.DRAG_CLASS, b); - } - - // getter for listener - public PadDurationListener getPadDurationListener() { - return padDurationListener; - } - - public PadStatusListener getPadStatusListener() { - return padStatusListener; - } - - public IPadPositionListener getPadPositionListener() { - return padPositionListener; - } - - public PadDragListener getPadDragListener() { - return padDragListener; - } -} diff --git a/PlayWallCore/src/de/tobias/playpad/pad/view/IPadView.java b/PlayWallCore/src/de/tobias/playpad/pad/view/IPadView.java index 67c3ce99cb1b6a3956df92cea0d6a50783f68d39..c62d67a1a6e992b811fb7960695ef5e667ad8321 100644 --- a/PlayWallCore/src/de/tobias/playpad/pad/view/IPadView.java +++ b/PlayWallCore/src/de/tobias/playpad/pad/view/IPadView.java @@ -38,7 +38,7 @@ public interface IPadView { public IPadViewController getViewController(); /** - * Gibt das oberste GUI Element zurück, welche im MainView verwendet wird. + * Gibt das oberste GUI Element des Pads zurück, welche im MainView verwendet wird. * * @return root node */