| /******************************************************************************* |
| * Copyright (c) 2008, 2009 Standards for Technology in Automotive Retail 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: |
| * David Carver - initial API and implementation, bug 212330 |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xml.ui.internal.handlers; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.commands.AbstractHandler; |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.commands.ICommandService; |
| import org.eclipse.ui.commands.IElementUpdater; |
| import org.eclipse.ui.handlers.HandlerUtil; |
| import org.eclipse.ui.menus.UIElement; |
| import org.eclipse.ui.services.IServiceScopes; |
| import org.eclipse.ui.texteditor.ITextEditor; |
| import org.eclipse.wst.sse.core.StructuredModelManager; |
| import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; |
| import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; |
| import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil; |
| import org.eclipse.wst.xml.ui.internal.XMLUIPlugin; |
| import org.eclipse.wst.xml.ui.internal.tabletree.XMLEditorMessages; |
| import org.eclipse.wst.xml.ui.internal.util.SharedXMLEditorPluginImageHelper; |
| |
| public class ToggleEditModeHandler extends AbstractHandler implements IElementUpdater { |
| protected ImageDescriptor onImage = SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_ETOOL_CONSTRAINON); |
| protected ImageDescriptor offImage = SharedXMLEditorPluginImageHelper.getImageDescriptor(SharedXMLEditorPluginImageHelper.IMG_ETOOL_CONSTRAINOFF); |
| |
| public ToggleEditModeHandler() { |
| super(); |
| } |
| |
| public Object execute(ExecutionEvent event) throws ExecutionException { |
| IEditorPart editor = HandlerUtil.getActiveEditor(event); |
| ITextEditor textEditor = null; |
| if (editor instanceof ITextEditor) |
| textEditor = (ITextEditor) editor; |
| else { |
| Object o = editor.getAdapter(ITextEditor.class); |
| if (o != null) |
| textEditor = (ITextEditor) o; |
| } |
| if (textEditor != null) { |
| IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); |
| IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(document); |
| if (model != null) { |
| ModelQuery modelQuery; |
| try { |
| modelQuery = ModelQueryUtil.getModelQuery(model); |
| } |
| finally { |
| model.releaseFromRead(); |
| } |
| if (modelQuery != null) { |
| int newState = getNextState(modelQuery.getEditMode()); |
| modelQuery.setEditMode(newState); |
| |
| // Force a Refresh on this command so that the image can |
| // be |
| // updated. |
| ICommandService commandService = (ICommandService) HandlerUtil.getActiveWorkbenchWindow(event).getService(ICommandService.class); |
| Map filter = new HashMap(); |
| filter.put(IServiceScopes.WINDOW_SCOPE, HandlerUtil.getActiveWorkbenchWindow(event)); |
| commandService.refreshElements(event.getCommand().getId(), filter); |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| 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; |
| } |
| |
| |
| // Handlers that need to interact with the ui that the command came from |
| // need to use implement this method. |
| public void updateElement(UIElement element, Map parameters) { |
| IEditorPart editor = XMLUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); |
| ITextEditor textEditor = null; |
| if (editor instanceof ITextEditor) |
| textEditor = (ITextEditor) editor; |
| else if (editor != null) { |
| Object o = editor.getAdapter(ITextEditor.class); |
| if (o != null) |
| textEditor = (ITextEditor) o; |
| } |
| if (textEditor != null) { |
| IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); |
| IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(document); |
| if (model != null) { |
| ModelQuery modelQuery; |
| try { |
| modelQuery = ModelQueryUtil.getModelQuery(model); |
| } |
| finally { |
| model.releaseFromRead(); |
| } |
| if (modelQuery != null) { |
| setAppearanceForEditMode(modelQuery.getEditMode(), element); |
| } |
| } |
| } |
| } |
| |
| public void setAppearanceForEditMode(int editMode, UIElement element) { |
| if (editMode == ModelQuery.EDIT_MODE_CONSTRAINED_STRICT) { |
| element.setTooltip(XMLEditorMessages.XMLTableTreeActionBarContributor_3); |
| element.setText(XMLEditorMessages.XMLTableTreeActionBarContributor_3); |
| element.setIcon(onImage); |
| } |
| else { |
| element.setTooltip(XMLEditorMessages.XMLTableTreeActionBarContributor_5); |
| element.setText(XMLEditorMessages.XMLTableTreeActionBarContributor_5); |
| element.setIcon(offImage); |
| } |
| } |
| } |