package com.frinika.sequencer.gui.partview; //import GM.javasound.JavaSoundSynth; import java.awt.Dimension; import java.awt.Rectangle; import java.util.HashMap; import java.util.Vector; import javax.swing.Icon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import com.frinika.project.gui.ProjectFrame; import com.frinika.sequencer.patchname.MyPatch; import com.frinika.sequencer.patchname.Node; import com.frinika.sequencer.patchname.PatchNameMap; /* * Created on Mar 14, 2006 * * Copyright (c) 2006 P.J.Leonard * * http://www.frinika.com * * This file is part of Frinika. * * Frinika 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 2 of the License, or * (at your option) any later version. * Frinika 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 Frinika; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * Used to select voices. */ public class VoiceTree extends JTree { private static Icon instrument_icon = new javax.swing.ImageIcon(ProjectFrame.class.getResource("/icons/instrument.gif")); public VoiceTree(PatchNameMap vl) { setModel( new DefaultTreeModel(myTreeRoot(vl))); setRootVisible(true); jbInit(); DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon(instrument_icon); setCellRenderer(renderer); } HashMap patchlist = new HashMap(); public void select(MyPatch patch) { DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)patchlist.get(patch); if(treenode == null) return; TreePath path = new TreePath(treenode.getPath()); setSelectionPath(path); Rectangle bounds = getPathBounds(path); scrollRectToVisible(bounds); } public void jbInit() { this.setMinimumSize(new Dimension(0, 0)); } /** * My stuff * */ private void addNodes(DefaultMutableTreeNode tn,Vector<Node> list) { for (Node o : list) { DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(o); if(o.getData() instanceof MyPatch) patchlist.put(o.getData(), newNode); tn.add(newNode); if (o.getData() instanceof Vector) { addNodes(newNode,(Vector)(o.getData())); } } } private DefaultMutableTreeNode myTreeRoot(PatchNameMap vl) { DefaultMutableTreeNode root = new DefaultMutableTreeNode("Instruments"); addNodes(root,vl.getList()); return root; } }