/** * BetonQuest Editor - advanced quest creating tool for BetonQuest * Copyright (C) 2016 Jakub "Co0sh" Sapalski * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package pl.betoncraft.betonquest.editor.controller; import java.util.List; import javafx.fxml.FXML; import javafx.scene.control.ContextMenu; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import pl.betoncraft.betonquest.editor.BetonQuestEditor; import pl.betoncraft.betonquest.editor.custom.PackageTreeCell; import pl.betoncraft.betonquest.editor.custom.PackageTreeItem; import pl.betoncraft.betonquest.editor.custom.PackageTreeItem.Type; import pl.betoncraft.betonquest.editor.model.PackageSet; import pl.betoncraft.betonquest.editor.model.QuestPackage; /** * Controls root pane, specifically package choosing. * * @author Jakub Sapalski */ public class RootController { private static RootController instace; @FXML private HBox packages; @FXML private TreeView<String> tree; @FXML private ContextMenu menu; private PackageTreeItem local; public RootController() { instace = this; } public static void setPackageSets(List<PackageSet> packages) { instace.tree.setCellFactory(event -> { return new PackageTreeCell(); }); PackageTreeItem root = new PackageTreeItem(Type.ROOT); instace.tree.setRoot(root); instace.tree.setShowRoot(false); // fill local packages instace.local = new PackageTreeItem(Type.TYPE, "Local"); instace.local.setExpanded(true); for (PackageSet set : packages) { PackageTreeItem setItem = new PackageTreeItem(Type.SET, set.toString()); instace.local.getChildren().add(setItem); setItem.setExpanded(true); for (QuestPackage pack : set.getPackages()) { PackageTreeItem packItem = new PackageTreeItem(Type.PACKAGE, pack.toString()); setItem.getChildren().add(packItem); } } root.getChildren().add(instace.local); } @FXML public void select(MouseEvent event) { try { TreeItem<String> selected = tree.getSelectionModel().getSelectedItem(); if (event.getClickCount() != 2 || selected == null || !selected.isLeaf()) { return; } BetonQuestEditor instance = BetonQuestEditor.getInstance(); PackageSet set = instance.getSet(selected.getParent().getValue()); if (set == null) { return; } QuestPackage pack = set.getPackage(selected.getValue()); if (pack == null) { return; } instance.display(pack); hide(); } catch (Exception e) { ExceptionController.display(e); } } @FXML public void show() { try { packages.setVisible(true); } catch (Exception e) { ExceptionController.display(e); } } @FXML public void hide() { try { packages.setVisible(false); } catch (Exception e) { ExceptionController.display(e); } } public static RootController getInstance() { return instace; } public void delete(PackageTreeItem item) { try { if (item != null) { if (BetonQuestEditor.confirm("confirm-action")) { switch (item.getType()) { case PACKAGE: PackageSet set1 = BetonQuestEditor.getInstance().getSet(item.getParent().getValue()); if (set1.getPackages().size() == 1) { BetonQuestEditor.showError("cannot-delete-last-package"); return; } QuestPackage pack = set1.getPackage(item.getValue()); set1.getPackages().remove(pack); if (BetonQuestEditor.getInstance().getDisplayedPackage().equals(pack)) { BetonQuestEditor.getInstance().display(set1); } break; case SET: PackageSet set2 = BetonQuestEditor.getInstance().getSet(item.getValue()); BetonQuestEditor.getInstance().getSets().remove(set2); if (BetonQuestEditor.getInstance().getDisplayedPackage().getSet().equals(set2)) { BetonQuestEditor.getInstance().clearView(); } break; default: break; } BetonQuestEditor.getInstance().refresh(); } } } catch (Exception e) { ExceptionController.display(e); } } public void edit(PackageTreeItem item) { try { if (item != null) { switch (item.getType()) { case PACKAGE: PackageSet set1 = BetonQuestEditor.getInstance().getSet(item.getParent().getValue()); QuestPackage pack = set1.getPackage(item.getValue()); NameEditController.display(pack.getName(), true); break; case SET: PackageSet set2 = BetonQuestEditor.getInstance().getSet(item.getValue()); NameEditController.display(set2.getName(), true); break; default: break; } BetonQuestEditor.getInstance().refresh(); } } catch (Exception e) { ExceptionController.display(e); } } public static void clear() { instace.tree.setRoot(null); } }