/*
* TermApp.java
*
* Created on July 31, 2007, 8:26 AM
*
* @author pquiring
*
* Requires JSch from www.jcraft.com (which requires JZLib)
*
* Known Bug : CTRL+TAB/CTRL+SHIFT+TAB are still captured by JTabbedPane.
*
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javaforce.*;
public class TermApp extends javax.swing.JFrame implements KeyEventDispatcher {
public static String version = "0.18";
public boolean dispatchKeyEvent(KeyEvent e) {
//System.out.println("KeyEvent:" + e);
if ((e.getSource() instanceof Buffer) && (e.getKeyCode() == e.VK_TAB) && (e.getModifiers() == 0)) {
return true; //do not pass on to next dispatch handler (prevents FocusManager from using TAB to switch tabs)
}
return false; //pass on as normal
}
/** Creates new form TermApp */
public TermApp() {
initComponents();
//disable TAB processing for Buffer
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
Settings.loadSettings();
setSize(Settings.settings.WindowXSize, Settings.settings.WindowYSize);
setLocation(Settings.settings.WindowXPos, Settings.settings.WindowYPos);
if (Settings.settings.bWindowMax) setExtendedState(MAXIMIZED_BOTH);
Menu.create(this, tabs, !JF.isWindows());
if (!JF.isWindows()) {
Menu.localAction();
}
setTitle("jfTerm/" + version);
JFImage icon = new JFImage();
icon.loadPNG(this.getClass().getClassLoader().getResourceAsStream("jfterm.png"));
setIconImage(icon.getImage());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tabs = new javax.swing.JTabbedPane();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle("jfterm");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentMoved(java.awt.event.ComponentEvent evt) {
formComponentMoved(evt);
}
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
addWindowStateListener(new java.awt.event.WindowStateListener() {
public void windowStateChanged(java.awt.event.WindowEvent evt) {
formWindowStateChanged(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 402, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentMoved
// System.out.println("moved");
if (Settings.settings.bWindowMax) return;
Point loc = getLocation();
Settings.settings.WindowXPos = loc.x;
Settings.settings.WindowYPos = loc.y;
}//GEN-LAST:event_formComponentMoved
private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
// System.out.println("resized");
if (!Settings.settings.bWindowMax) {
Dimension size = getSize();
Settings.settings.WindowXSize = size.width;
Settings.settings.WindowYSize = size.height;
}
//resize all Buffers
Buffer buffer;
for(int a=0;a<tabs.getTabCount();a++) {
buffer = (Buffer)((JComponent)tabs.getComponentAt(a)).getClientProperty("buffer");
buffer.changeSize();
}
}//GEN-LAST:event_formComponentResized
private void formWindowStateChanged(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowStateChanged
Settings.settings.bWindowMax = evt.getNewState() == MAXIMIZED_BOTH;
}//GEN-LAST:event_formWindowStateChanged
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
exit();
}//GEN-LAST:event_formWindowClosing
/**
* @param args the command line arguments (currently ignored)
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TermApp().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTabbedPane tabs;
// End of variables declaration//GEN-END:variables
public void exit() {
Settings.saveSettings();
while(tabs.getTabCount() > 0) {
Buffer buffer = (Buffer)((JComponent)tabs.getComponentAt(0)).getClientProperty("buffer");
buffer.close();
}
System.exit(0);
}
public void showMaps(JComponent c) {
System.out.println("Registered KeyStrokes for : " + c);
KeyStroke ks[] = c.getRegisteredKeyStrokes();
if (ks != null) {
for(int a=0;a<ks.length;a++) System.out.println("KeyStroke : " + ks[a]);
}
showMaps(c,JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
showMaps(c,JComponent.WHEN_FOCUSED);
showMaps(c,JComponent.WHEN_IN_FOCUSED_WINDOW);
}
public void showMaps(JComponent c, int cond) {
System.out.println("Maps for : " + c + " : cond = " + cond);
ActionMap m = tabs.getActionMap();
do {
System.out.println("amap = " + m);
Object keys[] = m.allKeys();
m = m.getParent();
if (keys == null) {System.out.println("keys=null"); continue;}
for(int a=0;a<keys.length;a++) { System.out.println("key:" + keys[a]); }
} while (m != null);
InputMap i = tabs.getInputMap(cond);
do {
System.out.println("imap = " + i);
Object keys[] = i.allKeys();
i = i.getParent();
if (keys == null) {System.out.println("keys=null"); continue;}
for(int a=0;a<keys.length;a++) { System.out.println("key:" + keys[a]); }
} while (i != null);
System.out.println("");
}
}