diff --git a/PlayWall/src/de/tobias/playpad/VersionUpdater.java b/PlayWall/src/de/tobias/playpad/VersionUpdater.java index 7cc6280d1f22f6614e5207f330a1a37afc2f2e0e..34345c4bd77a1a12ffe8ece42a296354f0f6af08 100644 --- a/PlayWall/src/de/tobias/playpad/VersionUpdater.java +++ b/PlayWall/src/de/tobias/playpad/VersionUpdater.java @@ -64,7 +64,6 @@ public class VersionUpdater implements UpdateService { ProjectSettings projectSettings2 = new ProjectSettings(); projectSettings2.setColumns(columns); projectSettings2.setRows(rows); - projectSettings2.setPageCount(pages); projectSettings2.save(settingsElement); diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopButtonEditView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopButtonEditView.java index a4a3f4daf4a9a630940baecf9eb99c2e3bb950ee..cebef47bc3a6d9aa0d4ec12ebebda2d2242f8d10 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopButtonEditView.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopButtonEditView.java @@ -7,6 +7,7 @@ import de.tobias.playpad.Strings; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.page.Page; import de.tobias.playpad.viewcontroller.main.IMainViewController; +import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; import de.tobias.utils.ui.icon.FontAwesomeType; import de.tobias.utils.ui.icon.FontIcon; import de.tobias.utils.util.Localization; @@ -22,12 +23,15 @@ public class DesktopButtonEditView extends HBox implements EventHandler<ActionEv private Button leftMoveButton; private Button rightMoveButton; private Button editTextButton; + private Button deleteButton; private transient Button pageButton; + private transient MenuToolbarViewController controller; - public DesktopButtonEditView(Page page, Button pageButton) { + public DesktopButtonEditView(MenuToolbarViewController controller, Page page, Button pageButton) { this.page = page; this.pageButton = pageButton; + this.controller = controller; leftMoveButton = new Button("", new FontIcon(FontAwesomeType.ARROW_LEFT)); leftMoveButton.setOnAction(this); @@ -41,7 +45,11 @@ public class DesktopButtonEditView extends HBox implements EventHandler<ActionEv editTextButton.setOnAction(this); editTextButton.setFocusTraversable(false); - getChildren().addAll(leftMoveButton, rightMoveButton, editTextButton); + deleteButton = new Button("", new FontIcon(FontAwesomeType.TRASH)); + deleteButton.setOnAction(this); + deleteButton.setFocusTraversable(false); + + getChildren().addAll(leftMoveButton, rightMoveButton, editTextButton, deleteButton); setSpacing(7); } @@ -66,7 +74,7 @@ public class DesktopButtonEditView extends HBox implements EventHandler<ActionEv event.consume(); } else if (event.getSource() == rightMoveButton) { Project project = page.getProjectReference(); - if (page.getId() < project.getSettings().getPageCount()) { + if (page.getId() < project.getPages().size()) { Page rightPage = project.getPage(page.getId() + 1); int rightIndex = rightPage.getId(); @@ -95,8 +103,13 @@ public class DesktopButtonEditView extends HBox implements EventHandler<ActionEv name = Localization.getString(Strings.UI_Window_Main_PageButton, (page.getId() + 1)); } pageButton.setText(name); - + event.consume(); + } else if (event.getSource() == deleteButton) { + // TODO Fragen + Project project = page.getProjectReference(); + project.removePage(page); + controller.initPageButtons(); } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index 6a0a26ed49f1985c563479b8e974c140ba484f91..1f1638753f4c252ae74c0fc1a9b88f74ea5913d8 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -117,6 +117,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro protected ToggleButton playButton; protected ToggleButton dragButton; protected ToggleButton colorButton; + private Button addPageButton; private IMainViewController mainViewController; @@ -169,8 +170,22 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro connect.setEditMode(DesktopEditMode.DRAG); } else if (c == colorButton) { connect.setEditMode(DesktopEditMode.COLOR); + } else if (c == null) { + // select Old Button, if new selecting is empty + editButtons.getToggleGroup().selectToggle(b); } }); + + // Add Page Button for Drag Mode (Page Edit Mode) + addPageButton = new Button("", new FontIcon(FontAwesomeType.PLUS)); + addPageButton.setFocusTraversable(false); + addPageButton.setOnAction(e -> + { + openProject.addPage(); + initPageButtons(); + highlightPageButton(currentSelectedPageButton); + }); + iconHbox.getChildren().add(editButtons); } @@ -182,6 +197,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro for (IPadView view : mainViewController.getPadViews()) { view.enableDragAndDropDesignMode(false); } + iconHbox.getChildren().remove(addPageButton); } else if (oldValue == DesktopEditMode.COLOR) { if (colorPickerView != null) { colorPickerView.hide(); @@ -197,19 +213,24 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro for (IPadView view : mainViewController.getPadViews()) { view.enableDragAndDropDesignMode(true); } + iconHbox.getChildren().add(0, addPageButton); + System.out.println(iconHbox.getChildren()); } else if (newValue == DesktopEditMode.COLOR) { colorButton.setSelected(true); GlobalDesign design = Profile.currentProfile().currentLayout(); if (design instanceof ColorModeHandler) { colorPickerView = new DesktopColorPickerView((ColorModeHandler) design); - + // Add Listener for Pads mainViewController.addListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED); - + colorPickerView.show(); } } + + // Update Page Button (for Edit/Display) + highlightPageButton(currentSelectedPageButton); } private void initLayoutMenu() { @@ -252,14 +273,14 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro @Override public void initPageButtons() { - currentPage = -1; + currentSelectedPageButton = -1; pageHBox.getChildren().clear(); if (openProject == null) { return; } - for (int i = 0; i < openProject.getSettings().getPageCount(); i++) { + for (int i = 0; i < openProject.getPages().size(); i++) { Page page = openProject.getPage(i); String name = page.getName(); @@ -372,13 +393,13 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro return volumeSlider; } - private int currentPage = 0; + private int currentSelectedPageButton = 0; @Override public void highlightPageButton(int index) { if (index >= 0) { - if (pageHBox.getChildren().size() > currentPage && currentPage >= 0) { - Node removeNode = pageHBox.getChildren().get(currentPage); + if (pageHBox.getChildren().size() > currentSelectedPageButton && currentSelectedPageButton >= 0) { + Node removeNode = pageHBox.getChildren().get(currentSelectedPageButton); removeNode.getStyleClass().remove(CURRENT_PAGE_BUTTON); if (removeNode instanceof Button) { @@ -389,11 +410,11 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro if (pageHBox.getChildren().size() > index) { Node newNode = pageHBox.getChildren().get(index); newNode.getStyleClass().add(CURRENT_PAGE_BUTTON); - currentPage = index; + currentSelectedPageButton = index; 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); + DesktopButtonEditView editBox = new DesktopButtonEditView(this, openProject.getPage(index), button); button.setGraphic(editBox); } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java index df1a4f755e5b2ac012e813bb722a9a2f2c658793..eb061618c9bf592c3b26977bfbc55e104701b7c0 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java @@ -5,6 +5,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.TextField; +// TODO Search Pads public class DesktopSearchController implements EventHandler<ActionEvent> { private TextField textField; diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java index 347361cd08b6c8ebde4b661e2259f438e71df8fe..8e56e4ba21984506aa3de729b38409ddd66cdf5c 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java @@ -50,7 +50,7 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll return; } - for (int i = 0; i < openProject.getSettings().getPageCount(); i++) { + for (int i = 0; i < openProject.getPages().size(); i++) { Button button = new Button(Localization.getString(Strings.UI_Window_Main_PageButton, (i + 1))); button.setUserData(i); button.setFocusTraversable(false); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/PrintDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/PrintDialog.java index 8c895f0c67858fe7ce2520f83c19da7c27ea96fb..6a0e81442bb7ac97c97ff8105b4460e4859afcc2 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/PrintDialog.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/PrintDialog.java @@ -46,7 +46,7 @@ public class PrintDialog extends ViewController { super("printDialog", "de/tobias/playpad/assets/dialog/project/", null, PlayPadMain.getUiResourceBundle()); this.project = project; - int pages = project.getSettings().getPageCount(); + int pages = project.getPages().size(); for (int i = 0; i < pages; i++) { pageComboBox.getItems().add(i + 1); } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index 605a0ab07af895cf9871c9b03b72d3ee37ef7eed..d15beed39118356b9c23b4759bea1c6e3b4a47fd 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -491,9 +491,8 @@ public class MainViewController extends ViewController implements IMainViewContr if (openProject == null) { return false; } - ProjectSettings projectSettings = openProject.getSettings(); - if (page < 0 || page >= projectSettings.getPageCount()) { + if (page < 0 || page >= openProject.getPages().size()) { return false; } @@ -644,7 +643,7 @@ public class MainViewController extends ViewController implements IMainViewContr public void registerKeyboardListener(EventType<KeyEvent> eventType, EventHandler<KeyEvent> listener) { getParent().getScene().addEventHandler(eventType, listener); } - + public <T extends Event> void addListenerForPads(EventHandler<? super T> handler, EventType<T> eventType) { for (IPadView view : padViews) { view.getRootNode().addEventFilter(eventType, handler); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/GeneralTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/GeneralTabViewController.java index 05315f5d6a113a20bb838b5f8a0048c0a9fa186f..f1fb5142df4839f85760a0c8df77d9e7f1282fc8 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/GeneralTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/GeneralTabViewController.java @@ -25,7 +25,6 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i private Screen mainWindowScreen; private Alertable parentController; // Für Benachrichtungen - @FXML private TextField pageCountTextField; @FXML private TextField columnTextField; @FXML private TextField rowTextField; @@ -38,27 +37,12 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i if (activePlayer) { rowTextField.setDisable(true); columnTextField.setDisable(true); - pageCountTextField.setDisable(true); } } @Override public void init() { - pageCountTextField.textProperty().addListener((a, b, c) -> - { - if (c.matches(DIGIT_POSITIV) && !c.isEmpty()) { - int number = Integer.valueOf(c); - if (number > ProjectSettings.MAX_PAGES) { - pageCountTextField.pseudoClassStateChanged(PseudoClasses.ERROR_CLASS, true); // Zahl zu groß - } else { - pageCountTextField.pseudoClassStateChanged(PseudoClasses.ERROR_CLASS, false); // Zahl ok - } - } else { - pageCountTextField.pseudoClassStateChanged(PseudoClasses.ERROR_CLASS, true); // Negativ oder leer - } - }); - columnTextField.textProperty().addListener((a, b, c) -> { if (c.matches(DIGIT_POSITIV) && !c.isEmpty()) { @@ -98,14 +82,12 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i if (neededHeight <= height && neededWidth <= width) return true; - } catch (NumberFormatException e) { - } + } catch (NumberFormatException e) {} return false; } @Override public void loadSettings(ProjectSettings settings) { - pageCountTextField.setText(String.valueOf(settings.getPageCount())); columnTextField.setText(String.valueOf(settings.getColumns())); rowTextField.setText(String.valueOf(settings.getRows())); @@ -125,9 +107,8 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i public void saveSettings(ProjectSettings settings) { int columns = Integer.valueOf(columnTextField.getText()); int rows = Integer.valueOf(rowTextField.getText()); - int pageCount = Integer.valueOf(pageCountTextField.getText()); - if (settings.getColumns() != columns || settings.getRows() != rows || settings.getPageCount() != pageCount) + if (settings.getColumns() != columns || settings.getRows() != rows) changeSettings = true; else changeSettings = false; @@ -135,7 +116,6 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i // Copy Settings settings.setColumns(columns); settings.setRows(rows); - settings.setPageCount(pageCount); } @Override @@ -169,6 +149,7 @@ public class GeneralTabViewController extends ProjectSettingsTabViewController i @Override public Task<Void> getTask(ProjectSettings settings, Project project, IMainViewController controller) { return new Task<Void>() { + @Override protected Void call() throws Exception { updateTitle(name()); diff --git a/PlayWallCore/src/de/tobias/playpad/project/Project.java b/PlayWallCore/src/de/tobias/playpad/project/Project.java index efa079db286bcad361e4d4b56e66bfcbd07465c1..f630cbad2937544b438b063221f6857e22fe86bf 100644 --- a/PlayWallCore/src/de/tobias/playpad/project/Project.java +++ b/PlayWallCore/src/de/tobias/playpad/project/Project.java @@ -56,7 +56,7 @@ public class Project { private final ProjectReference projectReference; private ProjectSettings settings; - + /** * Liste mit den aktuellen Laufzeitfehlern. */ @@ -67,7 +67,7 @@ public class Project { this.projectReference = ref; this.pages = new HashMap<>(); this.settings = new ProjectSettings(); - + this.exceptions = FXCollections.observableArrayList(); this.activePlayers = new SimpleIntegerProperty(); } @@ -126,7 +126,7 @@ public class Project { // Pages public Page getPage(int index) { - if (!pages.containsKey(index) && index < settings.getPageCount()) { + if (!pages.containsKey(index) && index < ProjectSettings.MAX_PAGES) { pages.put(index, new Page(index, this)); } return pages.get(index); @@ -269,7 +269,7 @@ public class Project { public ObservableList<PadException> getExceptions() { return exceptions; } - + // Utils public void loadPadsContent() { getPads().forEach(pad -> @@ -295,4 +295,21 @@ public class Project { pad.getContent().unloadMedia(); }); } + + public void removePage(Page page) { + pages.remove(page.getId()); + for (int i = page.getId() + 1; i < pages.size(); i++) { + Page tempPage = pages.get(i); + tempPage.setId(i - 1); + pages.put(i - 1, tempPage); + } + pages.remove(pages.size() - 1); + + System.out.println(pages); + } + + public void addPage() { + int index = pages.size(); + pages.put(index, new Page(index, this)); + } } diff --git a/PlayWallCore/src/de/tobias/playpad/project/ProjectSettings.java b/PlayWallCore/src/de/tobias/playpad/project/ProjectSettings.java index 31e1cc9e2a50f208f91ee9065d44a8aa7c44b371..487e1d2603f12ad3e1eeed2a5266aab757623c38 100644 --- a/PlayWallCore/src/de/tobias/playpad/project/ProjectSettings.java +++ b/PlayWallCore/src/de/tobias/playpad/project/ProjectSettings.java @@ -13,17 +13,12 @@ public class ProjectSettings { public static final int MAX_COLUMNS = 10; public static final int MAX_ROWS = 10; - @Storable private int pageCount = 2; @Storable private int columns = 6; @Storable private int rows = 5; private boolean useMediaPath = false; private Path mediaPath = null; - public int getPageCount() { - return pageCount; - } - /** * Returns the value of colums (Number of cells form left to right) * @@ -50,12 +45,6 @@ public class ProjectSettings { return useMediaPath; } - public void setPageCount(int pageCount) { - if (pageCount > MAX_PAGES) - pageCount = MAX_PAGES; - this.pageCount = pageCount; - } - public void setColumns(int columns) { if (columns > MAX_COLUMNS) columns = MAX_COLUMNS; @@ -78,15 +67,12 @@ public class ProjectSettings { private static final String ROWS_ELEMENT = "Rows"; private static final String COLUMNS_ELEMENT = "Columns"; - private static final String PAGE_COUNT_ELEMENT = "PageCount"; private static final String MEDIA_PATH_ELEMENT = "MediaPath"; private static final String MEDIA_PATH_ACTIVE_ATTR = "active"; public static ProjectSettings load(Element element) { ProjectSettings settings = new ProjectSettings(); - if (element.element(PAGE_COUNT_ELEMENT) != null) - settings.setPageCount(Integer.valueOf(element.element(PAGE_COUNT_ELEMENT).getStringValue())); if (element.element(COLUMNS_ELEMENT) != null) settings.setColumns(Integer.valueOf(element.element(COLUMNS_ELEMENT).getStringValue())); if (element.element(ROWS_ELEMENT) != null) @@ -102,7 +88,6 @@ public class ProjectSettings { } public void save(Element element) { - element.addElement(PAGE_COUNT_ELEMENT).addText(String.valueOf(pageCount)); element.addElement(COLUMNS_ELEMENT).addText(String.valueOf(columns)); element.addElement(ROWS_ELEMENT).addText(String.valueOf(rows)); diff --git a/PlayWallCore/src/de/tobias/playpad/project/page/Page.java b/PlayWallCore/src/de/tobias/playpad/project/page/Page.java index c76eac00f33a56d775cd744909c641109b1e5be9..3db469efd3ae1af8e2796147f55f9cff9faf036c 100644 --- a/PlayWallCore/src/de/tobias/playpad/project/page/Page.java +++ b/PlayWallCore/src/de/tobias/playpad/project/page/Page.java @@ -86,4 +86,9 @@ public class Page { public void removePade(int id) { pads.remove(id); } + + @Override + public String toString() { + return "Page [id=" + id + "]"; + } }