/*******************************************************************************
* Copyright (c) 2010 Stefan A. Tzeggai.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Stefan A. Tzeggai - initial API and implementation
******************************************************************************/
package org.geopublishing.geopublisher.gui.group;
import java.awt.event.ActionEvent;
import java.util.Enumeration;
import javax.swing.AbstractAction;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.tree.TreeNode;
import org.geopublishing.atlasViewer.dp.DpEntry;
import org.geopublishing.atlasViewer.dp.DpRef;
import org.geopublishing.atlasViewer.dp.Group;
import org.geopublishing.atlasViewer.map.Map;
import org.geopublishing.atlasViewer.map.MapRef;
import org.geopublishing.geopublisher.group.GroupTreeCreateSubmenuAction;
import org.geopublishing.geopublisher.group.GroupTreeDeleteAction;
import org.geopublishing.geopublisher.group.GroupTreeEditAction;
import org.geopublishing.geopublisher.gui.datapool.DataPoolEditAction;
import org.geopublishing.geopublisher.gui.map.MapPoolPrefsAction;
import org.geopublishing.geopublisher.swing.GeopublisherGUI;
import de.schmitzm.jfree.chart.style.ChartStyle;
/**
* This class provides the right-mouse button context-menu available in the
* {@link EditGroupsDnDJTreePanel}.
*/
public class GroupJPopupMenu extends JPopupMenu {
public GroupJPopupMenu(EditGroupsDnDJTreePanel editGroupsPanel,
TreeNode clickedNode, final Group firstGroup) {
add(new JMenuItem(new GroupTreeCreateSubmenuAction(editGroupsPanel,
clickedNode)));
/**
* Delete is possible on all TreeNodes but the root one.
*/
if (clickedNode instanceof TreeNode && clickedNode != firstGroup) {
add(new JMenuItem(new GroupTreeDeleteAction(editGroupsPanel,
clickedNode)));
}
/**
* These functions are only possible on TreeNodes that are Groups
*/
if (clickedNode instanceof Group && clickedNode != firstGroup) {
final Group g = (Group) clickedNode;
add(new JMenuItem(new GroupTreeEditAction(editGroupsPanel,
clickedNode)));
/**
* A checkbox that allows to define this group as the special FILE
* menu
*/
JCheckBoxMenuItem isFileMenuMenuItem = new JCheckBoxMenuItem(
new AbstractAction(GeopublisherGUI
.R("MenuTree.PopupmenuItem.ThisIsTheFileMenu")) {
@Override
public void actionPerformed(ActionEvent e) {
if (!g.isFileMenu()) {
// If we set this group to be the File menu, we
// have to remove the flag from all the other
// group menus first
removeFileMenuFlag(firstGroup);
}
g.setFileMenu(!g.isFileMenu());
}
/**
* Recurse through the group-tree and remove any
* "File-Menu" flags
*/
private void removeFileMenuFlag(Group group) {
Enumeration<?> children = group.children();
for (; children.hasMoreElements();) {
Object child = children.nextElement();
if (child instanceof Group) {
Group subgroup = (Group) child;
subgroup.setFileMenu(false);
removeFileMenuFlag(subgroup);
}
}
}
});
isFileMenuMenuItem.setSelected(g.isFileMenu());
add(isFileMenuMenuItem);
/**
* A checkbox that allows to define this group as the official HELP
* menu
*/
JCheckBoxMenuItem isHelpMenuMenuItem = new JCheckBoxMenuItem(
new AbstractAction(GeopublisherGUI
.R("MenuTree.PopupmenuItem.ThisIsTheHelpMenu")) {
@Override
public void actionPerformed(ActionEvent e) {
if (!g.isHelpMenu()) {
// If we set this group to be the help menu, we
// have to remove the flag from all the other
// group menus first
removeHelpMenuFlag(firstGroup);
}
g.setHelpMenu(!g.isHelpMenu());
}
/**
* Recurse through the group-tree and remove any
* "Help-Menu" flags
*/
private void removeHelpMenuFlag(Group group) {
Enumeration<?> children = group.children();
for (; children.hasMoreElements();) {
Object child = children.nextElement();
if (child instanceof Group) {
Group subgroup = (Group) child;
subgroup.setHelpMenu(false);
removeHelpMenuFlag(subgroup);
}
}
}
});
isHelpMenuMenuItem.setSelected(g.isHelpMenu());
add(isHelpMenuMenuItem);
}
if (clickedNode instanceof MapRef) {
MapRef mapRef = (MapRef) clickedNode;
final Map targetMap = mapRef.getTarget();
add(new MapPoolPrefsAction(editGroupsPanel, targetMap, mapRef
.getMapPool()));
} else if (clickedNode instanceof DpRef) {
DpRef<DpEntry<? extends ChartStyle>> dpRef = (DpRef<DpEntry<? extends ChartStyle>>) clickedNode;
final DpEntry<? extends ChartStyle> targetDpe = dpRef.getTarget();
add(new DataPoolEditAction(editGroupsPanel, targetDpe));
}
}
}