package org.freehep.application.mdi; import java.awt.event.ActionEvent; import java.util.Iterator; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.freehep.application.Application; /** * A menu that includes a list of all active windows. * @author Tony Johnson */ public class WindowMenu extends JMenu { private int nOriginal = -1; private PageManager pm; public void fireMenuSelected() { if (nOriginal < 0) nOriginal = getMenuComponentCount(); MDIApplication app = (MDIApplication) Application.getApplication(); pm = app.getPageManager(); app.setSelectedPageManager(pm); int nn = 0; List pages = pm.pages(); if (!pages.isEmpty()) addSeparator(); for (Iterator i = pages.iterator(); i.hasNext(); nn++) { PageContext context = (PageContext) i.next(); JMenuItem item = new WindowMenuItem(context,nn); add(item); } super.fireMenuSelected(); } protected void fireMenuDeselected() { super.fireMenuDeselected(); // Fix for Freehep-552 int n = getMenuComponentCount(); for (int i=n; i>nOriginal; ) { this.remove(--i); } } private class WindowMenuItem extends JMenuItem { WindowMenuItem(PageContext context, int i) { super(i +" "+ context.getTitle()); this.context = context; setMnemonic('0' + (char) (i)); setIcon(context.getIcon()); } protected void fireActionPerformed(ActionEvent evt) { pm.show(context); } private PageContext context; } }