/* * 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 static javax.swing.BorderFactory.createBevelBorder; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JOptionPane; import javax.swing.JRadioButtonMenuItem; import javax.swing.event.InternalFrameEvent; import javax.swing.event.InternalFrameListener; import com.romraider.Settings; import com.romraider.editor.ecu.ECUEditor; import com.romraider.editor.ecu.ECUEditorManager; import com.romraider.logger.ecu.ui.handler.table.TableUpdateHandler; import com.romraider.maps.Rom; import com.romraider.maps.Table; public class TableFrame extends JInternalFrame implements InternalFrameListener, ActionListener { private static final long serialVersionUID = -2651279694660392351L; private final Table table; private TableMenuBar tableMenuBar = null; public TableFrame(String title, Table table) { super(title, true, true); this.table = table; add(table); setFrameIcon(null); setBorder(createBevelBorder(0)); if (System.getProperty("os.name").startsWith("Mac OS")) putClientProperty("JInternalFrame.isPalette", true); setVisible(false); tableMenuBar = new TableMenuBar(this); setJMenuBar(tableMenuBar); setDefaultCloseOperation(DISPOSE_ON_CLOSE); addInternalFrameListener(this); } @Override public void internalFrameActivated(InternalFrameEvent e) { ECUEditor parent = getEditor(); parent.getTableToolBar().updateTableToolBar(); parent.getToolBar().updateButtons(); parent.getEditorMenuBar().updateMenu(); } @Override public void internalFrameOpened(InternalFrameEvent e) { RegisterTable(); } @Override public void internalFrameClosing(InternalFrameEvent e) { TableUpdateHandler.getInstance().deregisterTable(this.getTable()); } @Override public void internalFrameClosed(InternalFrameEvent e) { getEditor().getTableToolBar().updateTableToolBar(); } @Override public void internalFrameIconified(InternalFrameEvent e) { ; } @Override public void internalFrameDeiconified(InternalFrameEvent e) { ; } @Override public void internalFrameDeactivated(InternalFrameEvent e) { getEditor().getTableToolBar().updateTableToolBar(); } public void RegisterTable() { TableUpdateHandler.getInstance().registerTable(this.getTable()); } public Table getTable() { return table; } public ECUEditor getEditor() { return ECUEditorManager.getECUEditor(); } public TableMenuBar getTableMenuBar() { return this.tableMenuBar; } @Override public void actionPerformed(ActionEvent e) { TableMenuBar menu = getTableMenuBar(); if (e.getSource() == menu.getUndoAll()) { getTable().undoAll(); } else if (e.getSource() == menu.getRevert()) { getTable().setRevertPoint(); } else if (e.getSource() == menu.getUndoSel()) { getTable().undoSelected(); } else if (e.getSource() == menu.getClose()) { ECUEditorManager.getECUEditor().removeDisplayTable(this); } else if (e.getSource() == menu.getTableProperties()) { JOptionPane.showMessageDialog(getTable(), new TablePropertyPanel(getTable()), getTable().getName() + " Table Properties", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == menu.getCopySel()) { getTable().copySelection(); } else if (e.getSource() == menu.getCopyTable()) { getTable().copyTable(); } else if (e.getSource() == menu.getPaste()) { getTable().paste(); } else if (e.getSource() == menu.getCompareOff()) { getTable().setCompareTable(null); getTable().setCompareValueType(Settings.DATA_TYPE_BIN); getTableMenuBar().getCompareToBin().setSelected(true); } else if (e.getSource() == menu.getCompareAbsolute()) { getTable().setCompareDisplay(Settings.COMPARE_DISPLAY_ABSOLUTE); } else if (e.getSource() == menu.getComparePercent()) { getTable().setCompareDisplay(Settings.COMPARE_DISPLAY_PERCENT); } else if (e.getSource() == menu.getCompareOriginal()) { getTable().setCompareValueType(Settings.DATA_TYPE_ORIGINAL); getTableMenuBar().getCompareToOriginal().setSelected(true); compareByTable(getTable()); } else if (e.getSource() == menu.getCompareMap()) { JTableChooser chooser = new JTableChooser(); Table selectedTable = chooser.showChooser(getTable()); if(null != selectedTable) { compareByTable(selectedTable); } } else if (e.getSource() instanceof TableMenuItem) { Table selectedTable = findSimilarTable((TableMenuItem)e.getSource()); if(null != e.getSource()) { compareByTable(selectedTable); } } else if (e.getSource() == menu.getCompareToOriginal()) { getTable().setCompareValueType(Settings.DATA_TYPE_ORIGINAL); getTable().refreshCompare(); } else if (e.getSource() == menu.getCompareToBin()) { getTable().setCompareValueType(Settings.DATA_TYPE_BIN); getTable().refreshCompare(); } else if (e.getSource() == menu.getInterp()) { getTable().interpolate(); } else if (e.getSource() == menu.getVertInterp()) { getTable().verticalInterpolate(); } else if (e.getSource() == menu.getHorizInterp()) { getTable().horizontalInterpolate(); } } public void compareByTable(Table selectedTable) { if(null == selectedTable) { return; } getTable().setCompareTable(selectedTable); ECUEditorManager.getECUEditor().getTableToolBar().updateTableToolBar(getTable()); getTable().populateCompareValues(selectedTable); } public void refreshSimilarOpenTables() { JMenu similarTables = getTableMenuBar().getSimilarOpenTables(); similarTables.removeAll(); for(Rom rom : ECUEditorManager.getECUEditor().getImages()) { for(TableTreeNode tableNode : rom.getTableNodes()) { if(tableNode.getTable().getName().equalsIgnoreCase(getTable().getName())) { JRadioButtonMenuItem similarTable = new TableMenuItem(rom.getFileName()); similarTable.setToolTipText(tableNode.getFrame().getTable().getName()); similarTable.addActionListener(this); similarTables.add(similarTable); break; } } } getTableMenuBar().initCompareGroup(); getTableMenuBar().repaint(); } private Table findSimilarTable(TableMenuItem menuItem) { for(Rom rom : ECUEditorManager.getECUEditor().getImages()) { if(menuItem.getText().equalsIgnoreCase(rom.getFileName())) { for(TableTreeNode treeNode : rom.getTableNodes()) { if(menuItem.getToolTipText().equalsIgnoreCase(treeNode.getFrame().getTable().getName())) { return treeNode.getFrame().getTable(); } } } } return null; } }