package info.opencards.ui.catui; import info.opencards.core.CardFile; import info.opencards.core.categories.Category; import info.opencards.core.categories.CategoryChangeListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.util.Enumeration; /** * DOCUMENT ME! * * @author Holger Brandl */ public class CategoryModel extends DefaultTreeModel implements CategoryChangeListener { private final Category rootCategory; private final CategoryTree categoryTree; public CategoryModel(DefaultMutableTreeNode root, CategoryTree categoryTree) { super(root); this.categoryTree = categoryTree; rootCategory = (Category) root.getUserObject(); rootCategory.addCategoryChangeListener(this); for (Category category : rootCategory.getChildCategories()) { addedChildCategory(category); } } public void valueForPathChanged(TreePath path, Object newValue) { // super.valueForPathChanged(path, newValue); Category category = (Category) ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); category.setName((String) newValue); } public static Category getDefaultCategory() { Category rootCategory = new Category("All"); Category mathCategory = new Category("Math"); mathCategory.addChildCategory(new Category("Statistics")); rootCategory.addChildCategory(mathCategory); rootCategory.addChildCategory(new Category("Computer")); Category bioCategory = new Category("Biology"); bioCategory.addChildCategory(new Category("Neuroscience")); bioCategory.addChildCategory(new Category("Genetics")); rootCategory.addChildCategory(bioCategory); rootCategory.addChildCategory(new Category("Arts")); return rootCategory; } DefaultMutableTreeNode getNode(Object userValue) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) this.getRoot(); for (Enumeration e = root.depthFirstEnumeration(); e.hasMoreElements(); ) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement(); if (node.getUserObject() == userValue) { return node; } } return null; } public void removedChild(Category child) { DefaultMutableTreeNode node = getNode(child); if (node != null) { node.removeFromParent(); } // getNode(child.getParent()).remove(getNode(child)); reload(); categoryTree.expandTree(); } public void addedChildCategory(Category category) { getNode(category.getParent()).add(new DefaultMutableTreeNode(category)); //recurse into all sub-categories of <code>category</code> for (Category childCat : category.getChildCategories()) { addedChildCategory(childCat); } //expand row reload(); categoryTree.expandTree(); } public void registeredCardset(Category category, CardFile cardSet) { } public void unregisteredCardset(Category category, CardFile cardSet) { } public void categoryChanged(Category category) { // getNode(category).setUserObject(category); reload(); categoryTree.expandTree(); } public void categoryDetached(Category category, Category oldParent) { DefaultMutableTreeNode catNode = getNode(category); removeNodeFromParent(catNode); reload(); categoryTree.expandTree(); } public Category getRootCategory() { return (Category) ((DefaultMutableTreeNode) getRoot()).getUserObject(); } }