blob: d305fd3b5f5bf9ec817f51409f5569219710706a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.actions.single;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
import org.eclipse.jst.pagedesigner.dom.DOMStyleUtil;
import org.eclipse.jst.pagedesigner.editors.PageDesignerActionConstants;
import org.eclipse.jst.pagedesigner.elementedit.IElementEdit;
import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
/**
* @author mengbo
* @version 1.5
*/
public class SingleElementActionGroup extends ActionGroup {
// TODO: why?
private static final Action action = new Action() {
// create a default instance that does nothing
// Action is abstract but has no abstract methods
// run() on this object is a NOOP
};
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
*/
public void fillContextMenu(IMenuManager menu) {
ElementEditPart part = fixUpSelection(getContext().getSelection());
if (part == null) {
return;
}
IDOMElement ele = (IDOMElement) part.getIDOMNode();
addStylelMenu(menu, part, ele);
// next add element special actions
IElementEdit elementEdit = part.getElementEdit();
if (elementEdit != null) {
elementEdit.fillContextMenu(menu, ele);
}
}
/**
* @param selection
* @return
*/
private ElementEditPart fixUpSelection(ISelection selection) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection) selection;
if (sel.size() != 1) {
return null;
}
if (sel.getFirstElement() instanceof ElementEditPart) {
return (ElementEditPart) sel.getFirstElement();
}
}
return null;
}
/**
* @param menu
* @param part
*/
private void addStylelMenu(IMenuManager menu, ElementEditPart part,
IDOMElement ele) {
// IMenuManager stylesub = new MenuManager("Style");
IMenuManager stylesub = menu;
addStyle(menu, part, ele);
addStyleClassesMenu(stylesub, part, ele);
if (DOMStyleUtil.supportStyleAttribute(ele)) {
// addBorderStyleMenu(stylesub, part, ele);
addColorMenu(stylesub, part, ele);
addBackgroundMenu(stylesub, part, ele);
}
// menu.add(stylesub);
}
/**
*
* @param menu
* @param part
* @param ele
*/
private void addStyle(IMenuManager menu, ElementEditPart part,
IDOMElement ele) {
StyleSupport.createStyleAction(menu, part, ele);
}
/**
* @param stylesub
* @param part
*/
private void addStyleClassesMenu(IMenuManager stylesub,
ElementEditPart part, final IDOMElement ele) {
final IMenuManager classmenu = new MenuManager(PDPlugin
.getResourceString("ActionGroup.Submenu.StyleClasses"));//$NON-NLS-1$
StyleClassSupport.createStyleClassActions(classmenu, ele);
/*
* classmenu.add(action); classmenu.addMenuListener(new IMenuListener() {
*
* public void menuAboutToShow(IMenuManager manager) {
* classmenu.removeAll();
* StyleClassSupport.createStyleClassActions(classmenu, ele); } } );
*/
stylesub.appendToGroup(PageDesignerActionConstants.GROUP_STYLE,
classmenu);
}
/**
* @param stylesub
* @param part
*/
/*
* private void addBorderStyleMenu(IMenuManager stylesub, ElementEditPart
* part, final IDOMElement ele) { final IMenuManager borderStyleSub = new
* MenuManager(PDPlugin
* .getResourceString("ActionGroup.Submenu.BorderStyle"));//$NON-NLS-1$
* borderStyleSub.add(action);
*
* final String mode = BorderStyleSupport.getCurrentBorderStyle(ele);
*
* borderStyleSub.addMenuListener(new IMenuListener() { public void
* menuAboutToShow(IMenuManager manager) { borderStyleSub.removeAll();
* BorderStyleSupport.createParagraphActions(borderStyleSub, ele, mode); }
* }); stylesub.appendToGroup(PageDesignerActionConstants.GROUP_STYLE,
* borderStyleSub); }
*/
/**
* @param stylesub
* @param part
*/
private void addColorMenu(IMenuManager stylesub, ElementEditPart part,
final IDOMElement ele) {
final IMenuManager colorSub = new MenuManager(PDPlugin
.getResourceString("ActionGroup.Submenu.Color"));//$NON-NLS-1$
colorSub.add(action);
colorSub.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
colorSub.removeAll();
ColorSupport.createColorActions(colorSub, ele,
ICSSPropertyID.ATTR_COLOR);
}
});
stylesub.appendToGroup(PageDesignerActionConstants.GROUP_STYLE,
colorSub);
}
/**
* @param stylesub
* @param part
*/
private void addBackgroundMenu(IMenuManager stylesub, ElementEditPart part,
final IDOMElement ele) {
final IMenuManager colorSub = new MenuManager(PDPlugin
.getResourceString("ActionGroup.Submenu.BackgroundColor"));//$NON-NLS-1$
colorSub.add(action);
colorSub.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
colorSub.removeAll();
ColorSupport.createColorActions(colorSub, ele,
ICSSPropertyID.ATTR_BACKGROUND_COLOR);
}
});
stylesub.appendToGroup(PageDesignerActionConstants.GROUP_STYLE,
colorSub);
}
}