blob: b31c023580cc551cbe6effd04e55ad7ffd992f86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2013 IBM Corporation 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: IBM Corporation - initial API and
* implementation David Carver - bug 212330 - migrate to org.eclipse.ui.menus extension point
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.tabletree;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
import org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.CMDocumentLoader;
import org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.InferredGrammarBuildingCMDocumentLoader;
import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.eclipse.wst.xml.ui.internal.util.SharedXMLEditorPluginImageHelper;
import org.w3c.dom.Document;
/**
*
*/
public class XMLTableTreeActionBarContributor implements IDesignViewerActionBarContributor {
protected IEditorPart editorPart;
protected final static String DESIGN_VIEWER_SEPARATOR_1_ID = "sed.tabletree.separator.1"; //$NON-NLS-1$
protected final static String DESIGN_VIEWER_SEPARATOR_2_ID = "sed.tabletree.separator.2"; //$NON-NLS-1$
protected final static String VALIDATE_XML_ID = "sed.tabletree.validateXML"; //$NON-NLS-1$
protected final static String RELOAD_GRAMMAR_ID = "sed.tabletree.reloadGrammar"; //$NON-NLS-1$
protected final static String TOGGLE_EDIT_MODE_ID = "sed.tabletree.toggleEditMode"; //$NON-NLS-1$
protected final static String EXPAND_ALL_ID = "sed.tabletree.expandAll"; //$NON-NLS-1$
protected final static String COLLAPSE_ALL_ID = "sed.tabletree.collapseAll"; //$NON-NLS-1$
protected ToggleEditModeAction toggleAction;
protected ReloadGrammarAction reloadGrammarAction;
// protected ValidateXMLAction validateXMLAction;
protected ViewerExpandCollapseAction expandAction;
protected ViewerExpandCollapseAction collapseAction;
protected ViewerExpandCollapseAction xmlMenuExpandAction;
protected ViewerExpandCollapseAction xmlMenuCollapseAction;
private IActionBars actionBars;
public XMLTableTreeActionBarContributor() {
}
protected void removeContributions(IContributionManager manager) {
/*
* try { doRemove(manager, DESIGN_VIEWER_SEPARATOR_1_ID); doRemove(manager,
* DESIGN_VIEWER_SEPARATOR_2_ID); doRemove(manager, VALIDATE_XML_ID); doRemove(manager,
* RELOAD_GRAMMAR_ID); doRemove(manager, TOGGLE_EDIT_MODE_ID); doRemove(manager, EXPAND_ALL_ID);
* doRemove(manager, COLLAPSE_ALL_ID); } catch (Exception e) { }
*/
}
protected void doRemove(IContributionManager manager, String id) {
/*
* try { if (manager.find(id) != null) { manager.remove(id); } } catch (Exception e) { }
*/}
public void init(IActionBars bars, IWorkbenchPage page) {
init(bars);
}
public void init(IActionBars bars) {
this.actionBars = bars;
// IToolBarManager tbm = bars.getToolBarManager();
/*
* IMenuManager xmlMenu =
* bars.getMenuManager().findMenuUsingPath("org.eclipse.core.runtime.xml.design.xmlmenu");
* //$NON-NLS-1$
*
* if (xmlMenu == null) { xmlMenu = new
* MenuManager(XMLEditorMessages.XMLTableTreeActionBarContributor_0,
* "org.eclipse.core.runtime.xml.design.xmlmenu"); //$NON-NLS-1$ // For RCP usage if
* (bars.getMenuManager().find(IWorkbenchActionConstants.M_WINDOW) != null) {
* bars.getMenuManager().insertBefore(IWorkbenchActionConstants.M_WINDOW, xmlMenu); } } else {
* removeContributions(xmlMenu); }
*
* tbm.add(new Separator("DESIGN_VIEWER_SEPARATOR_1_ID")); //$NON-NLS-1$
*/
// ToggleEditModeAction
//
/*
* toggleAction = new ToggleEditModeAction(); toggleAction.setId(TOGGLE_EDIT_MODE_ID);
* xmlMenu.add(toggleAction); tbm.add(toggleAction);
*/
// ReloadGrammarAction
//
/*
* reloadGrammarAction = new ReloadGrammarAction();
* reloadGrammarAction.setId(RELOAD_GRAMMAR_ID); tbm.add(reloadGrammarAction);
* xmlMenu.add(reloadGrammarAction);
*
* xmlMenu.add(new Separator());
*/
// ExpandCollapseAction
//
/*
* xmlMenuExpandAction = new ViewerExpandCollapseAction(true);
* xmlMenuExpandAction.setId(EXPAND_ALL_ID);
* xmlMenuExpandAction.setText(XMLEditorMessages.XMLTableTreeActionBarContributor_1);
* xmlMenu.add(xmlMenuExpandAction);
*
* xmlMenuCollapseAction = new ViewerExpandCollapseAction(false);
* xmlMenuCollapseAction.setId(COLLAPSE_ALL_ID); xmlMenuCollapseAction.setId(EXPAND_ALL_ID);
* xmlMenuCollapseAction.setText(XMLEditorMessages.XMLTableTreeActionBarContributor_2);
* xmlMenu.add(xmlMenuCollapseAction);
*/
}
protected void addActionWithId(IMenuManager menuManager, Action action, String id) {
action.setId(id);
menuManager.add(action);
}
public void initViewerSpecificContributions(IActionBars bars) {
/*
* IToolBarManager tbm = bars.getToolBarManager(); tbm.add(new
* Separator(DESIGN_VIEWER_SEPARATOR_2_ID));
*
* expandAction = new ViewerExpandCollapseAction(true); expandAction.setId(EXPAND_ALL_ID);
* tbm.add(expandAction);
*
* collapseAction = new ViewerExpandCollapseAction(false);
* collapseAction.setId(COLLAPSE_ALL_ID); tbm.add(collapseAction);
*/
}
public void setViewerSpecificContributionsEnabled(boolean enabled) {
/*
* if (expandAction != null) { expandAction.setEnabled(enabled);
* xmlMenuExpandAction.setEnabled(enabled); }
*
* if (collapseAction != null) { collapseAction.setEnabled(enabled);
* xmlMenuCollapseAction.setEnabled(enabled); }
*/
}
public void setActiveEditor(IEditorPart targetEditor) {
editorPart = targetEditor;
// IStructuredModel model = getModelForEditorPart(targetEditor);
/*
* reloadGrammarAction.setModel(model);
* toggleAction.setModelQuery(ModelQueryUtil.getModelQuery(model));
*
* XMLTableTreeViewer tableTreeViewer = getTableTreeViewerForEditorPart(editorPart); if
* (tableTreeViewer != null) { expandAction.setViewer(tableTreeViewer);
* collapseAction.setViewer(tableTreeViewer);
*
* xmlMenuExpandAction.setViewer(tableTreeViewer);
* xmlMenuCollapseAction.setViewer(tableTreeViewer); }
*/
ITextEditor textEditor = null;
if (editorPart instanceof XMLMultiPageEditorPart) {
IWorkbenchPartSite site = editorPart.getSite();
if (site instanceof IEditorSite) {
textEditor = ((XMLMultiPageEditorPart) editorPart).getTextEditor();
}
}
actionBars.setGlobalActionHandler(ITextEditorActionConstants.UNDO,
getAction(textEditor, ITextEditorActionConstants.UNDO));
actionBars.setGlobalActionHandler(ITextEditorActionConstants.REDO,
getAction(textEditor, ITextEditorActionConstants.REDO));
// TODO... uncomment this and investigate NPE
//
// add the cut/copy/paste for text fields
// ActionHandlerPlugin.connectPart(editorPart);
}
protected final IAction getAction(ITextEditor editor, String actionId) {
return (editor == null ? null : editor.getAction(actionId));
}
/**
* @deprecated - not to be used
*/
protected IStructuredModel getModelForEditorPart(IEditorPart targetEditor) {
IStructuredModel result = null;
if (editorPart instanceof XMLMultiPageEditorPart) {
StructuredTextEditor textEditor = ((XMLMultiPageEditorPart) targetEditor).getTextEditor();
result = (textEditor != null) ? textEditor.getModel() : null;
}
return result;
}
/**
* @deprecated - not to be used
*/
protected XMLTableTreeViewer getTableTreeViewerForEditorPart(IEditorPart targetEditor) {
XMLTableTreeViewer result = null;
Object object = targetEditor.getAdapter(IDesignViewer.class);
if (object instanceof XMLTableTreeViewer) {
result = (XMLTableTreeViewer) object;
}
return result;
}
/**
*
*/
public class ToggleEditModeAction extends Action {
protected ImageDescriptor onImage = SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_ETOOL_CONSTRAINON);
protected ImageDescriptor offImage = SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_ETOOL_CONSTRAINOFF);
protected ModelQuery modelQuery;
public ToggleEditModeAction() {
setAppearanceForEditMode(ModelQuery.EDIT_MODE_CONSTRAINED_STRICT);
}
public void run() {
if (modelQuery != null) {
int newState = getNextState(modelQuery.getEditMode());
modelQuery.setEditMode(newState);
setAppearanceForEditMode(newState);
}
}
public void setModelQuery(ModelQuery newModelQuery) {
modelQuery = newModelQuery;
if (modelQuery != null) {
setAppearanceForEditMode(modelQuery.getEditMode());
}
}
public void setAppearanceForEditMode(int editMode) {
if (editMode == ModelQuery.EDIT_MODE_CONSTRAINED_STRICT) {
setToolTipText(XMLEditorMessages.XMLTableTreeActionBarContributor_3);
setText(XMLEditorMessages.XMLTableTreeActionBarContributor_4);
setImageDescriptor(onImage);
} else {
setToolTipText(XMLEditorMessages.XMLTableTreeActionBarContributor_5);
setText(XMLEditorMessages.XMLTableTreeActionBarContributor_6);
setImageDescriptor(offImage);
}
}
public int getNextState(int editMode) {
int result = -1;
if (editMode == ModelQuery.EDIT_MODE_CONSTRAINED_STRICT) {
result = ModelQuery.EDIT_MODE_UNCONSTRAINED;
} else {
result = ModelQuery.EDIT_MODE_CONSTRAINED_STRICT;
}
return result;
}
}
/**
*
*/
public class ReloadGrammarAction extends Action {
protected IStructuredModel model;
public ReloadGrammarAction() {
setDisabledImageDescriptor(SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_DTOOL_RLDGRMR));
setImageDescriptor(SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_ETOOL_RLDGRMR));
setToolTipText(XMLEditorMessages.XMLTableTreeActionBarContributor_7);
setText(XMLEditorMessages.XMLTableTreeActionBarContributor_8);
}
public void setModel(IStructuredModel newModel) {
this.model = newModel;
}
public void run() {
if (model != null) {
ModelQuery modelQuery = ModelQueryUtil.getModelQuery(model);
Document document = ((IDOMModel) model).getDocument();
if ((modelQuery != null) && (modelQuery.getCMDocumentManager() != null)) {
modelQuery.getCMDocumentManager().getCMDocumentCache().clear();
// TODO... need to figure out how to access the
// DOMObserver via ModelQuery
// ...why?
CMDocumentLoader loader = new InferredGrammarBuildingCMDocumentLoader(document,
modelQuery);
loader.loadCMDocuments();
}
}
}
}
/**
* @see org.eclipse.ui.IEditorActionBarContributor#dispose()
*/
public void dispose() {
setActiveEditor(null);
}
}