/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.netbeans.editor.navigation.actions;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.antlr.netbeans.editor.navigation.FiltersDescription;
import org.antlr.netbeans.editor.navigation.FiltersManager;
import org.openide.util.NbBundle;
import org.openide.util.actions.Presenter;
@NbBundle.Messages({
"LBL_FilterSubmenu=Filters"
})
public class FilterSubmenuAction extends AbstractAction implements Presenter.Popup {
private static final String PROP_FILTER_NAME = "nbFilterName";
private final FiltersManager filters;
/** Creates a new instance of FilterSubmenuAction
* @param filters
*/
public FilterSubmenuAction(FiltersManager filters) {
this.filters = filters;
}
@Override
public void actionPerformed(ActionEvent ev) {
Object source = ev.getSource();
// react just on submenu items, not on submenu click itself
if (source instanceof JCheckBoxMenuItem) {
JCheckBoxMenuItem menuItem = (JCheckBoxMenuItem)source;
String filterName = (String)(menuItem.getClientProperty(PROP_FILTER_NAME));
filters.setSelected(filterName, menuItem.isSelected());
}
}
@Override
public final JMenuItem getPopupPresenter() {
return createSubmenu();
}
private JMenuItem createSubmenu () {
FiltersDescription filtersDesc = filters.getDescription();
JMenuItem menu = new JMenu(Bundle.LBL_FilterSubmenu()); //NOI18N
JMenuItem menuItem;
String filterName;
for (int i = 0; i < filtersDesc.getFilterCount(); i++) {
filterName = filtersDesc.getName(i);
menuItem = new JCheckBoxMenuItem(filtersDesc.getDisplayName(i), filters.isSelected(filterName));
menuItem.addActionListener(this);
menuItem.putClientProperty(PROP_FILTER_NAME, filterName);
menu.add(menuItem);
}
return menu;
}
}