/* * This software copyright by various authors including the RPTools.net * development team, and licensed under the LGPL Version 3 or, at your option, * any later version. * * Portions of this software were originally covered under the Apache Software * License, Version 1.1 or Version 2.0. * * See the file LICENSE elsewhere in this distribution for license details. */ package net.rptools.maptool.client.ui.assetpanel; import java.awt.event.MouseListener; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeSelectionModel; import net.rptools.lib.swing.PopupListener; import net.rptools.maptool.client.AppActions; /** */ public class AssetTree extends JTree implements TreeSelectionListener { private Directory selectedDirectory; private AssetPanel assetPanel; public AssetTree(AssetPanel assetPanel) { super(assetPanel.getModel().getImageFileTreeModel()); this.assetPanel = assetPanel; setCellRenderer(new AssetTreeCellRenderer()); addMouseListener(createPopupListener()); addTreeSelectionListener(this); getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); getSelectionModel().addTreeSelectionListener(this); } @Override public int getRowHeight() { return -1; } public Directory getSelectedAssetGroup() { return selectedDirectory; } private MouseListener createPopupListener() { PopupListener listener = new PopupListener(createPopupMenu()); return listener; } private JPopupMenu createPopupMenu() { JPopupMenu menu = new JPopupMenu(); menu.add(new JMenuItem(AppActions.REMOVE_ASSET_ROOT)); return menu; } public void refresh() { ((ImageFileTreeModel) getModel()).refresh(); } //// // Tree Selection Listener /* (non-Javadoc) * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) */ public void valueChanged(TreeSelectionEvent e) { // Keep memory tight // TODO: make this an option if (selectedDirectory != null) { selectedDirectory.refresh(); } selectedDirectory = null; Object node = e.getPath().getLastPathComponent(); if (node instanceof Directory) { selectedDirectory = ((Directory) node); assetPanel.setDirectory((Directory) node); } } }