blob: bdd91a3e80b00ff441474e19f0cf0230170f4cfd [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.elementedit;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jst.jsf.common.dom.TagIdentifier;
import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer;
import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
import org.eclipse.jst.pagedesigner.viewer.IDropLocationStrategy;
import org.w3c.dom.Element;
/**
* IElementEdit support additional edit support to an element.
*
* This interface should not be extended by clients. Extend AbstractElementEdit
* instead.
*
* <p><b>Provisional API - subject to change</b></p>
*
* @author mengbo
* @version 1.5
*/
public interface IElementEdit
{
/**
* override default edit policies on part
* @param part
*/
public void createEditPolicies(ElementEditPart part);
/**
* The element (or its decendent) changed.
*
* @param ele
* @param part
* @param recursive
* @return handle model changes on part.
*/
public boolean handleModelChange(Element ele, ElementEditPart part,
boolean recursive);
/**
* Add special menu items for the particular element to the context menu.
*
* @param contextMenu
* @param ele
*/
public void fillContextMenu(IMenuManager contextMenu, Element ele);
/**
* This method is called when current selection is inside "ele". And this
* method should fill in menu items relating to the "ele" context and the
* current "innerSelection". For example, this "ele" could be a table,
* "innerSelection" could be something inside a cell. Then could fill in
* actions relating to the table and the cell, such as "add row before",
* "delete current column", etc.
*
* @param contextMenu
* @param elePart
* the elementeditpart corresponding to this ElementEdit
* @param nodePart
* the smallest part covers the current selection. nodePart will
* always be a decedent of the elePart.
* @param innerSelection
* the selection
* @return true if added actions.
*/
public boolean fillContainerContextMenu(IMenuManager contextMenu,
ElementEditPart elePart, NodeEditPart nodePart,
ISelection innerSelection);
/**
* whether the corresponding element support resize. If it does, then the
* corresponding policy installed through <code>createEditPolicies</code>
* should handle resize.
* @param ele
*
* @return true if ele has resize support
*/
public boolean isResizable(Element ele);
/**
* @param tag the element to return a drop location strategy for.
* This is the requesting element (being dropped), not the drop target
*
* @param viewer is the viewer where the new strategy will optionally
* add feedback
*
* @return the strategy to be used to use to find a drop location when
* the corresponding element is being dropped (the source part). May
* be null signalling that the caller should use its default strategy.
*
*/
public IDropLocationStrategy getDropRequestorLocationStrategy(TagIdentifier tag, EditPartViewer viewer);
/**
* @param tagId
* @return the drop customizer for this edit's element. May return null.
* Returning null and returning a IDropCustomizer whose runCustomizer always returns
* OK and getDropCustomizationData always returns null will be considered
* equivalent by the framework.
*/
public IDropCustomizer getDropCustomizer(TagIdentifier tagId);
/**
* @param tagId
* @return a tag creator for the indicated tag or null to indicate that the
* system should use it's default tag creator
*/
public ITagCreator getTagCreator(TagIdentifier tagId);
}