/*
* 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 javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSeparator;
import com.romraider.Settings;
import com.romraider.maps.Table3D;
public class TableMenuBar extends JMenuBar {
private static final long serialVersionUID = -695692646459410510L;
private JMenu fileMenu;
private JMenuItem graph;
private JMenu compareMenu;
private JRadioButtonMenuItem compareOriginal;
private JRadioButtonMenuItem compareMap;
private JMenu similarOpenTables;
private JRadioButtonMenuItem compareOff;
private JMenu compareDisplay;
private JRadioButtonMenuItem comparePercent;
private JRadioButtonMenuItem compareAbsolute;
private JMenu compareToValue;
private JRadioButtonMenuItem compareToOriginal;
private JRadioButtonMenuItem compareToBin;
private JMenuItem close;
private JMenu editMenu;
private JMenuItem undoSel;
private JMenuItem undoAll;
private JMenuItem revert;
private JMenuItem copySel;
private JMenuItem copyTable;
private JMenuItem paste;
private JMenuItem interp;
private JMenuItem vertInterp;
private JMenuItem horizInterp;
private JMenu viewMenu;
private JMenuItem tableProperties;
private ButtonGroup compareGroup;
private ButtonGroup compareDisplayGroup;
private ButtonGroup compareToGroup;
public TableMenuBar(TableFrame frame) {
initFileMenu(frame);
initEditMenu(frame);
initViewMenu(frame);
applyTableTypeRules(frame);
}
private void initFileMenu(TableFrame frame) {
fileMenu = new JMenu("Table");
graph = new JMenuItem("View Graph");
compareMenu = new JMenu("Compare");
setClose(new JMenuItem("Close Table"));
initCompareMenu(frame);
getClose().setText("Close " + frame.getTable().getName());
graph.addActionListener(frame);
getClose().addActionListener(frame);
graph.setMnemonic('G');
getClose().setMnemonic('X');
graph.setEnabled(false);
fileMenu.add(graph);
fileMenu.add(compareMenu);
fileMenu.add(new JSeparator());
fileMenu.add(getClose());
this.add(fileMenu);
}
private void initEditMenu(TableFrame frame) {
editMenu = new JMenu("Edit");
setUndoSel(new JMenuItem("Undo Selected Changes"));
setUndoAll(new JMenuItem("Undo All Changes"));
setRevert(new JMenuItem("Set Revert Point"));
setCopySel(new JMenuItem("Copy Selection"));
setCopyTable(new JMenuItem("Copy Table"));
setPaste(new JMenuItem("Paste"));
setVertInterp(new JMenuItem("Vertical Interpolate"));
setHorizInterp(new JMenuItem("Horizontal Interpolate"));
setInterp(new JMenuItem("Interpolate"));
editMenu.add(getUndoSel());
editMenu.add(getUndoAll());
editMenu.add(getRevert());
editMenu.add(new JSeparator());
editMenu.add(getCopySel());
editMenu.add(getCopyTable());
editMenu.add(new JSeparator());
editMenu.add(getPaste());
editMenu.add(new JSeparator());
if (frame.getTable() instanceof Table3D) {
editMenu.add(getVertInterp());
editMenu.add(getHorizInterp());
}
editMenu.add(getInterp());
editMenu.setMnemonic('E');
getUndoSel().setMnemonic('U');
getUndoAll().setMnemonic('A');
getRevert().setMnemonic('R');
getCopySel().setMnemonic('C');
getCopyTable().setMnemonic('T');
getPaste().setMnemonic('P');
getInterp().setMnemonic('I');
getVertInterp().setMnemonic('V');
getHorizInterp().setMnemonic('H');
getUndoSel().addActionListener(frame);
getUndoAll().addActionListener(frame);
getRevert().addActionListener(frame);
getCopySel().addActionListener(frame);
getCopyTable().addActionListener(frame);
getPaste().addActionListener(frame);
getInterp().addActionListener(frame);
getVertInterp().addActionListener(frame);
getHorizInterp().addActionListener(frame);
this.add(editMenu);
}
private void initViewMenu(TableFrame frame) {
viewMenu = new JMenu("View");
viewMenu.setMnemonic('V');
setTableProperties(new JMenuItem("Table Properties"));
getTableProperties().setToolTipText("Select to view the table properties.");
getTableProperties().setMnemonic('P');
getTableProperties().addActionListener(frame);
fileMenu.setMnemonic('F');
fileMenu.setMnemonic('T');
viewMenu.add(getTableProperties());
this.add(viewMenu);
}
private void initCompareMenu(TableFrame frame) {
setCompareOriginal(new JRadioButtonMenuItem("Show Changes"));
getCompareOriginal().setToolTipText("Compares the current values to the original or revert point values.");
setCompareMap(new JRadioButtonMenuItem("Compare to Another Map"));
getCompareMap().setToolTipText("Compares this table and a selected table.");
setSimilarOpenTables(new JMenu("Compare to Table"));
getSimilarOpenTables().setToolTipText("Compares this table to a similar table.");
setCompareOff(new JRadioButtonMenuItem("Off"));
setComparePercent(new JRadioButtonMenuItem("Percent Difference"));
setCompareAbsolute(new JRadioButtonMenuItem("Absolute Difference"));
compareDisplayGroup = new ButtonGroup();
compareDisplayGroup.add(getComparePercent());
compareDisplayGroup.add(getCompareAbsolute());
compareDisplay = new JMenu("Display");
compareDisplay.add(getComparePercent());
compareDisplay.add(getCompareAbsolute());
setCompareToOriginal(new JRadioButtonMenuItem("Compare to Original Value"));
getCompareToOriginal().setToolTipText("Compares this table to the selected table's original or revert point values.");
setCompareToBin(new JRadioButtonMenuItem("Compare to Bin Value"));
getCompareToBin().setToolTipText("Compares this table to the selected table's current values.");
compareToGroup = new ButtonGroup();
compareToGroup.add(getCompareToOriginal());
compareToGroup.add(getCompareToBin());
compareToValue = new JMenu("Compare to");
compareToValue.add(getCompareToOriginal());
compareToValue.add(getCompareToBin());
compareMenu.add(getCompareOriginal());
compareMenu.add(getCompareMap());
compareMenu.add(getSimilarOpenTables());
compareMenu.add(getCompareOff());
compareMenu.add(new JSeparator());
compareMenu.add(compareDisplay);
compareMenu.add(new JSeparator());
compareMenu.add(compareToValue);
compareMenu.setMnemonic('C');
getCompareOriginal().setMnemonic('C');
getCompareMap().setMnemonic('M');
getCompareOff().setMnemonic('O');
compareDisplay.setMnemonic('D');
getComparePercent().setMnemonic('P');
getCompareAbsolute().setMnemonic('A');
getSimilarOpenTables().setMnemonic('S');
compareToValue.setMnemonic('T');
getCompareToOriginal().setMnemonic('R');
getCompareToOriginal().setMnemonic('B');
getCompareOff().setSelected(true);
getCompareAbsolute().setSelected(true);
getCompareToOriginal().setSelected(true);
initCompareGroup();
getCompareOriginal().addActionListener(frame);
getCompareMap().addActionListener(frame);
getCompareOff().addActionListener(frame);
getComparePercent().addActionListener(frame);
getCompareAbsolute().addActionListener(frame);
getCompareToOriginal().addActionListener(frame);
getCompareToBin().addActionListener(frame);
}
public void initCompareGroup() {
compareGroup = new ButtonGroup();
compareGroup.add(getCompareOriginal());
compareGroup.add(getCompareMap());
compareGroup.add(getCompareOff());
for(int i = 0; i< getSimilarOpenTables().getItemCount(); i++) {
compareGroup.add(getSimilarOpenTables().getItem(i));
}
}
private void applyTableTypeRules(TableFrame frame) {
// Hide items that don't work with a DTC tables.
if(frame.getTable().getType() == Settings.TABLE_SWITCH) {
editMenu.setEnabled(false);
getCompareOriginal().setEnabled(false);
getComparePercent().setEnabled(false);
getCompareAbsolute().setEnabled(false);
getCompareToOriginal().setEnabled(false);
getCompareToBin().setEnabled(false);
}
}
public JMenuItem getUndoAll() {
return undoAll;
}
public void setUndoAll(JMenuItem undoAll) {
this.undoAll = undoAll;
}
public JMenuItem getRevert() {
return revert;
}
public void setRevert(JMenuItem revert) {
this.revert = revert;
}
public JMenuItem getUndoSel() {
return undoSel;
}
public void setUndoSel(JMenuItem undoSel) {
this.undoSel = undoSel;
}
public JMenuItem getClose() {
return close;
}
public void setClose(JMenuItem close) {
this.close = close;
}
public JMenuItem getTableProperties() {
return tableProperties;
}
public void setTableProperties(JMenuItem tableProperties) {
this.tableProperties = tableProperties;
}
public JMenuItem getCopySel() {
return copySel;
}
public void setCopySel(JMenuItem copySel) {
this.copySel = copySel;
}
public JMenuItem getCopyTable() {
return copyTable;
}
public void setCopyTable(JMenuItem copyTable) {
this.copyTable = copyTable;
}
public JMenuItem getPaste() {
return paste;
}
public void setPaste(JMenuItem paste) {
this.paste = paste;
}
public JRadioButtonMenuItem getCompareOff() {
return compareOff;
}
public void setCompareOff(JRadioButtonMenuItem compareOff) {
this.compareOff = compareOff;
}
public JRadioButtonMenuItem getCompareAbsolute() {
return compareAbsolute;
}
public void setCompareAbsolute(JRadioButtonMenuItem compareAbsolute) {
this.compareAbsolute = compareAbsolute;
}
public JRadioButtonMenuItem getComparePercent() {
return comparePercent;
}
public void setComparePercent(JRadioButtonMenuItem comparePercent) {
this.comparePercent = comparePercent;
}
public JRadioButtonMenuItem getCompareOriginal() {
return compareOriginal;
}
public void setCompareOriginal(JRadioButtonMenuItem compareOriginal) {
this.compareOriginal = compareOriginal;
}
public JRadioButtonMenuItem getCompareToOriginal() {
return compareToOriginal;
}
public void setCompareToOriginal(JRadioButtonMenuItem compareToOriginal) {
this.compareToOriginal = compareToOriginal;
}
public JRadioButtonMenuItem getCompareMap() {
return compareMap;
}
public void setCompareMap(JRadioButtonMenuItem compareMap) {
this.compareMap = compareMap;
}
public JRadioButtonMenuItem getCompareToBin() {
return compareToBin;
}
public void setCompareToBin(JRadioButtonMenuItem compareToBin) {
this.compareToBin = compareToBin;
}
public JMenu getSimilarOpenTables() {
return similarOpenTables;
}
public void setSimilarOpenTables(JMenu similarOpenTables) {
this.similarOpenTables = similarOpenTables;
}
public JMenuItem getInterp() {
return interp;
}
public void setInterp(JMenuItem interp) {
this.interp = interp;
}
public JMenuItem getHorizInterp() {
return this.horizInterp;
}
public void setHorizInterp(JMenuItem horizInterp) {
this.horizInterp = horizInterp;
}
public JMenuItem getVertInterp() {
return this.vertInterp;
}
public void setVertInterp(JMenuItem vertInterp) {
this.vertInterp = vertInterp;
}
}