package vicazh.hyperpool;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import org.jdesktop.jdic.tray.*;
import org.jdesktop.jdic.tray.internal.*;
/**
* The windows manager
*
* @author Victor Zhigunov
* @version 0.4.0
*/
public class IWindow implements ActionListener, TreeSelectionListener {
private Container container;
private String resource;
private Reader reader;
private JMenuItem menu;
private AbstractButton button;
private Map<Object, Window> map;
private JTree tree;
private Component component;
private TrayIcon tray;
private JMenuItem menuTray;
private SystemTray systemTray;
/**
* @param container
* manager container
* @param resource
* xml resource
* @param reader
* xml reader
* @param menu
* create menu
* @param button
* create button
* @param map
* frames map
* @param tree
* manager tree
* @param component
* application component
* @param trayIcon
* tray icon
* @param trayArg
* tray arg
* @param trayMenu
* tray menu
* @param status
* tray status
* @param menuTray
* tray menu item
*/
public IWindow(Container container, String resource, Reader reader,
JMenuItem menu, AbstractButton button, Map<Object, Window> map,
JTree tree, Component component, Icon trayIcon, String trayArg,
JPopupMenu trayMenu, boolean status, JMenuItem menuTray) {
this.container = container;
this.resource = resource;
this.reader = reader;
this.menu = menu;
menu.addActionListener(this);
this.button = button;
button.addActionListener(this);
this.map = map;
this.tree = tree;
tree.addTreeSelectionListener(this);
this.component = component;
try {
systemTray = SystemTray.getDefaultSystemTray();
tray = new TrayIcon(trayIcon, trayArg, trayMenu);
tray.addActionListener(this);
this.menuTray = menuTray;
menuTray.addActionListener(this);
tray(status);
} catch (Throwable e) {
menuTray.setEnabled(false);
component.setVisible(true);
}
valueChanged(null);
}
public Component get() {
int count = container.getComponentCount();
for (int i = 0; i < count; i++) {
Component c = container.getComponent(i);
if (c.isVisible())
return c;
}
return null;
}
private void tray(boolean b) {
component.setVisible(!b);
if (b)
systemTray.addTrayIcon(tray);
else
systemTray.removeTrayIcon(tray);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == menu || source == button) {
valueChanged(null);
try {
reader.getObject(resource);
} catch (Exception ex) {
Start.logger.log(Level.SEVERE, ex.getMessage(), ex);
}
} else if (source instanceof TrayIconService)
tray(false);
else if (source == menuTray)
tray(true);
else {
String command = e.getActionCommand();
if (command.equals("close"))
stop();
else {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (node == null)
return;
Window window = map.get(String.valueOf(node.getUserObject()
.hashCode()));
if (window != null)
window.dispose();
}
}
}
public void valueChanged(TreeSelectionEvent e) {
if (e != null) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (node != null) {
Object n = node.getUserObject();
if (n instanceof IElement) {
Component c = map.get(String.valueOf(n.hashCode()));
if (c == null) {
menu.setEnabled(true);
button.setEnabled(true);
return;
} else
c.setVisible(true);
}
}
}
menu.setEnabled(false);
button.setEnabled(false);
}
public void stop() {
for (Window e : map.values())
e.dispose();
}
}
|