/**
*
* @author pquiring
*
* Created : Oct 10, 2013
*/
import java.awt.*;
import javax.swing.*;
import javaforce.*;
public class Menu {
private static JTabbedPane tabs;
public static void create(JFrame frame, JTabbedPane tabs, boolean local) {
Menu.tabs = tabs;
JMenuBar menu = create(local, true);
frame.setJMenuBar(menu);
}
public static void create(JApplet applet, JTabbedPane tabs, boolean local) {
Menu.tabs = tabs;
JMenuBar menu = create(local, false);
applet.setJMenuBar(menu);
}
private static JMenuBar create(boolean local, boolean exit) {
JMenuBar menuBar;
JMenu menu;
JMenuItem item;
menuBar = new JMenuBar();
menu = new JMenu("File");
menu.setMnemonic('F');
menuBar.add(menu);
if (local) {
item = new JMenuItem("New Local Tab");
item.setMnemonic('N');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
localAction();
}
});
menu.add(item);
menu.add(new JSeparator());
}
item = new JMenuItem("Site Manager");
item.setMnemonic('S');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SiteDetails sdArray[] = SiteMgr.showSiteMgr(null);
if (sdArray == null) return;
for(SiteDetails sd : sdArray) connect(sd);
}
});
menu.add(item);
item = new JMenuItem("Log...");
item.setMnemonic('L');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (tabs.getTabCount() == 0) return;
Buffer buffer = (Buffer)((JComponent)tabs.getSelectedComponent()).getClientProperty("buffer");;
if (buffer == null) return;
buffer.logFile();
}
});
menu.add(item);
if (exit) {
menu.add(new JSeparator());
item = new JMenuItem("Exit");
item.setMnemonic('X');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exit();
}
});
menu.add(item);
}
menu = new JMenu("Edit");
menu.setMnemonic('E');
menuBar.add(menu);
item = new JMenuItem("Copy");
item.setMnemonic('C');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (tabs.getTabCount() == 0) return;
Buffer buffer = (Buffer)((JComponent)tabs.getSelectedComponent()).getClientProperty("buffer");
if (buffer == null) return;
buffer.copy();
}
});
menu.add(item);
item = new JMenuItem("Paste");
item.setMnemonic('P');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (tabs.getTabCount() == 0) return;
Buffer buffer = (Buffer)((JComponent)tabs.getSelectedComponent()).getClientProperty("buffer");;
if (buffer == null) return;
buffer.paste();
}
});
menu.add(item);
menu.add(new JSeparator());
item = new JMenuItem("Settings");
item.setMnemonic('T');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Buffer buffer;
int oldFontSize = Settings.settings.fontSize;
int oldFontX = Settings.settings.fontWidth;
int oldFontY = Settings.settings.fontHeight;
int oldFontDescent = Settings.settings.fontDescent;
int oldScrollBack = Settings.settings.scrollBack;
EditSettings.editSettings(null);
boolean changeFont =
oldFontSize != Settings.settings.fontSize ||
oldFontX != Settings.settings.fontWidth ||
oldFontY != Settings.settings.fontHeight ||
oldFontDescent != Settings.settings.fontDescent;
if (changeFont) Buffer.changeFont(); //static (need only do once)
for(int a=0;a<tabs.getTabCount();a++) {
buffer = (Buffer)((JComponent)tabs.getComponentAt(a)).getClientProperty("buffer");
if (oldScrollBack != Settings.settings.scrollBack) buffer.changeScrollBack(Settings.settings.scrollBack);
if (changeFont) buffer.reSize();
}
}
});
menu.add(item);
menu = new JMenu("Tools");
menu.setMnemonic('T');
menuBar.add(menu);
item = new JMenuItem("Run Script...");
item.setMnemonic('R');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (tabs.getTabCount() == 0) return;
Buffer buffer = (Buffer)((JComponent)tabs.getSelectedComponent()).getClientProperty("buffer");;
if (buffer == null) return;
if (buffer.script != null) {
JF.showError("Error", "Another script is already running");
return;
}
buffer.script = Script.load(buffer);
}
});
menu.add(item);
item = new JMenuItem("Stop Script");
item.setMnemonic('S');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (tabs.getTabCount() == 0) return;
Buffer buffer = (Buffer)((JComponent)tabs.getSelectedComponent()).getClientProperty("buffer");;
if (buffer == null) return;
buffer.script = null;
}
});
menu.add(item);
menu = new JMenu("Help");
menu.setMnemonic('H');
menuBar.add(menu);
item = new JMenuItem("Keyboard");
item.setMnemonic('K');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
JF.showMessage("Keyboard",
"CTRL-W = Close Tab\n" +
"CTRL-A = Select All\n" +
"F5/PAUSE = Break\n" +
"SHIFT + F1-F12 = F13-F24\n" +
"ALT-HOME = Clear Screen\n" +
"SHIFT-INSERT = Paste\n" +
"CTRL-INSERT = Copy"
);
}
});
menu.add(item);
menu.add(new JSeparator());
item = new JMenuItem("About");
item.setMnemonic('A');
item.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
JF.showMessage("About", "jfTerm/" + TermApp.version + "\nWebSite : jfterm.sourceforge.net\nAuthor : Peter Quiring");
System.gc();
}
});
menu.add(item);
return menuBar;
}
public static void connect(SiteDetails sd) {
Buffer buffer = new Buffer() {
public void close() {
super.close();
tabs.remove((JComponent)getClientProperty("panel"));
}
public void nextTab() {
int cnt = tabs.getTabCount();
int idx = tabs.getSelectedIndex();
idx++;
if (idx >= cnt) idx = 0;
tabs.setSelectedIndex(idx);
}
public void prevTab() {
int cnt = tabs.getTabCount();
int idx = tabs.getSelectedIndex();
idx--;
if (idx == -1) idx = cnt-1;
tabs.setSelectedIndex(idx);
}
public void setTab(int idx) {
int cnt = tabs.getTabCount();
if (idx > cnt) return;
tabs.setSelectedIndex(idx);
}
public void setName(String str) {
int idx = tabs.getSelectedIndex();
tabs.setTitleAt(idx, str);
}
};
JScrollPane pane = new JScrollPane(buffer);
pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
JPanel panel = new JPanel(new GridLayout());
panel.putClientProperty("buffer", buffer);
buffer.putClientProperty("panel", panel);
buffer.putClientProperty("pane", pane);
buffer.setSiteDetails(sd);
panel.add(pane);
tabs.addTab(sd.name, panel);
tabs.setSelectedComponent(panel);
tabs.revalidate();
}
public static void exit() {
Settings.saveSettings();
System.exit(0);
}
public static void localAction() {
SiteDetails sd = new SiteDetails();
sd.autoSize = true;
sd.protocol = "local";
sd.name = "localhost";
sd.utf8 = true;
connect(sd);
}
}