/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.segmentation.gui.settings; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; /** * Logique de la barre d'outils de l'arbre. */ public class AxisTreeToolBarLogic { private AxisTreeToolBar gui; private AxisTreeLogic axisTreeLogic; public AxisTreeToolBarLogic(AxisTreeToolBar toolbar) { gui = toolbar; gui.addSleeveActionListener(new AddSleeveAction()); gui.addFolderActionListener(new AddFolderAction()); gui.addDeleteActionListener(new DeleteAction()); } public void init(AxisTreeLogic newAxisTreeLogic) { axisTreeLogic = newAxisTreeLogic; newAxisTreeLogic.addTreeSelectionListener(new SleeveSelectionListener()); } public AxisTreeToolBar getGui() { return gui; } /** * Listener charg� de d�sactiver les boutons d'ajout lorsque la poche s�lectionn�e est une feuille, et de * les activer dans le cas contraire. */ protected class SleeveSelectionListener implements TreeSelectionListener { public void valueChanged(TreeSelectionEvent event) { TreeNode node = (TreeNode)event.getPath().getLastPathComponent(); AxisTree axisTree = axisTreeLogic.getGui(); TreePath selectionPath = axisTree.getSelectionPath(); boolean isSleeve = node instanceof Sleeve; boolean isSleeveTerminal = isSleeve && ((Sleeve)node).isTerminal(); int maxNodeDepth = axisTree.getClassificationStructureGui().getMaximumNodeDepth(); if (selectionPath != null && selectionPath.getPathCount() > maxNodeDepth) { gui.getAddFolderButton().setEnabled(false); } else { gui.getAddFolderButton().setEnabled(!isSleeveTerminal); } gui.getDeleteButton().setEnabled(isSleeve); gui.getAddSleeveButton().setEnabled(!isSleeveTerminal); } } /** * Listener charg� d'ajouter une poche dans l'arbre des poches. */ protected class AddSleeveAction implements ActionListener { public void actionPerformed(ActionEvent event) { axisTreeLogic.addSleeve(); } } /** * Listener charg� d'ajouter un dossier dans l'arbre des poches. */ protected class AddFolderAction implements ActionListener { public void actionPerformed(ActionEvent event) { axisTreeLogic.addFolder(); } } /** * Listener charg� de supprimer une poche ou un dossier de l'arbre des poches. */ protected class DeleteAction implements ActionListener { public void actionPerformed(ActionEvent event) { axisTreeLogic.delete(); } } }