/* * RomRaider Open-Source Tuning, Logging and Reflashing * Copyright (C) 2006-2012 RomRaider.com * * 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 2 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, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.romraider.swing; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import com.romraider.editor.ecu.ECUEditorManager; import com.romraider.maps.Rom; import com.romraider.maps.Table; public class JTableChooser extends JOptionPane implements MouseListener { public JTableChooser() { } private static final long serialVersionUID = 5611729002131147882L; JPanel displayPanel = new JPanel(); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Open Images"); JTree displayTree = new JTree(rootNode); JScrollPane displayScrollPane; public Table showChooser(Table targetTable) { Vector<Rom> roms = ECUEditorManager.getECUEditor().getImages(); int nameLength = 0; for (int i = 0; i < roms.size(); i++) { Rom rom = roms.get(i); DefaultMutableTreeNode romNode = new DefaultMutableTreeNode(rom.getFileName()); rootNode.add(romNode); for (TableTreeNode tableTreeNode : rom.getTableNodes()) { Table table = tableTreeNode.getTable(); // use the length of the table name to set the width of the displayTree // so the entire name can be read without being cut off on the right if (table.getName().length() > nameLength) { nameLength = table.getName().length(); } TableChooserTreeNode tableNode = new TableChooserTreeNode(table.getName(), table); // categories boolean categoryExists = false; for (int k = 0; k < romNode.getChildCount(); k++) { if (romNode.getChildAt(k).toString().equalsIgnoreCase(table.getCategory())) { ((DefaultMutableTreeNode) romNode.getChildAt(k)).add(tableNode); categoryExists = true; break; } } if (!categoryExists) { DefaultMutableTreeNode categoryNode = new DefaultMutableTreeNode(table.getCategory()); romNode.add(categoryNode); categoryNode.add(tableNode); } } } displayTree.setPreferredSize(new Dimension(nameLength*7, 400)); displayTree.setMinimumSize(new Dimension(nameLength*7, 400)); displayTree.expandPath(new TreePath(rootNode.getPath())); displayTree.setRootVisible(false); displayTree.addMouseListener(this); displayScrollPane = new JScrollPane(displayTree); displayScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); displayPanel.add(displayScrollPane); Object[] values = {"Compare", "Cancel"}; if ((showOptionDialog(SwingUtilities.windowForComponent(targetTable), displayPanel, "Select a Map", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, values, values[0]) == 0 && (displayTree.getLastSelectedPathComponent() instanceof TableChooserTreeNode))) { return ((TableChooserTreeNode) displayTree.getLastSelectedPathComponent()).getTable(); } else { return null; } } @Override public void mouseReleased(MouseEvent e) { displayTree.setPreferredSize(new Dimension(displayTree.getWidth(), (displayTree.getRowCount()*displayTree.getRowHeight()))); displayTree.revalidate(); } @Override public void mouseClicked(MouseEvent e){} @Override public void mouseEntered(MouseEvent e){} @Override public void mouseExited(MouseEvent e){} @Override public void mousePressed(MouseEvent e){} }