package org.korsakow.ide.ui.controller.action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.ref.WeakReference;
import java.util.Collection;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import org.dsrg.soenea.domain.MapperException;
import org.korsakow.domain.interf.IResource;
import org.korsakow.ide.Application;
import org.korsakow.ide.ui.ResourceEditor;
import org.korsakow.ide.ui.ProjectExplorer.Action;
public class MenuWindowAction implements ActionListener
{
public void actionPerformed(ActionEvent e) {
Application app = Application.getInstance();
JMenu menu = (JMenu)app.getProjectExplorer().getMenu(Action.MenuWindow);
menu.removeAll();
ActionListener itemActionListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
JMenuItem comp = (JMenuItem)event.getSource();
WeakReference<JFrame> ref = (WeakReference<JFrame>)comp.getClientProperty("frame");
JFrame frame = ref.get();
if (frame != null) {
try {
frame.toFront();
} catch (Throwable t) {
// ignored; caught in case frame had already been disposed
}
}
}
};
JMenuItem item;
int count = 0;
if (app.getKeywordPoolDialog() != null) {
item = new JMenuItem(app.getKeywordPoolDialog().getTitle(), ++count);
item.putClientProperty("frame", new WeakReference<JFrame>(app.getKeywordPoolDialog()));
item.addActionListener(itemActionListener);
menu.add(item);
}
if (app.getSnuPoolDialog() != null) {
item = new JMenuItem(app.getSnuPoolDialog().getTitle(), ++count);
item.putClientProperty("frame", new WeakReference<JFrame>(app.getSnuPoolDialog()));
item.addActionListener(itemActionListener);
menu.add(item);
}
if (app.getLinkPoolDialog() != null) {
item = new JMenuItem(app.getLinkPoolDialog().getTitle(), ++count);
item.putClientProperty("frame", new WeakReference<JFrame>(app.getSnuPoolDialog()));
item.addActionListener(itemActionListener);
menu.add(item);
}
if (app.getPossiblePoolDialog() != null) {
item = new JMenuItem(app.getPossiblePoolDialog().getTitle(), ++count);
item.putClientProperty("frame", new WeakReference<JFrame>(app.getSnuPoolDialog()));
item.addActionListener(itemActionListener);
menu.add(item);
}
if (menu.getMenuComponentCount() > 0)
menu.add(new JSeparator());
Collection<ResourceEditor> editors = app.getOpenEditors();
for (ResourceEditor editor : editors) {
IResource resource = null;
try {
resource = app.getResourceForEditor(editor);
} catch (MapperException e1) {
Application.getInstance().showUnhandledErrorDialog(e1);
}
if (resource != null) {
item = new JMenuItem(editor.getTitle() + ":" + resource.getName(), ++count);
item.putClientProperty("frame", new WeakReference<JFrame>(editor));
item.addActionListener(itemActionListener);
menu.add(item);
}
}
}
}