| /******************************************************************************* |
| * 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.editors; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtension; |
| import org.eclipse.core.runtime.IExtensionPoint; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.gef.DefaultEditDomain; |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.GraphicalViewer; |
| import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; |
| import org.eclipse.gef.editparts.ScalableRootEditPart; |
| import org.eclipse.gef.palette.PaletteRoot; |
| import org.eclipse.gef.ui.actions.ActionRegistry; |
| import org.eclipse.gef.ui.actions.UpdateAction; |
| import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences; |
| import org.eclipse.gef.ui.palette.PaletteViewer; |
| import org.eclipse.gef.ui.palette.PaletteViewerProvider; |
| import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette; |
| import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler; |
| import org.eclipse.gef.ui.views.palette.PaletteViewerPage; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuListener; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jst.pagedesigner.IJMTConstants; |
| import org.eclipse.jst.pagedesigner.PDPlugin; |
| import org.eclipse.jst.pagedesigner.actions.container.ContainerActionGroup; |
| import org.eclipse.jst.pagedesigner.actions.menuextension.CustomedContextMenuActionGroup; |
| import org.eclipse.jst.pagedesigner.actions.range.RangeActionGroup; |
| import org.eclipse.jst.pagedesigner.actions.single.SingleElementActionGroup; |
| import org.eclipse.jst.pagedesigner.commands.CopyAction; |
| import org.eclipse.jst.pagedesigner.commands.CutAction; |
| import org.eclipse.jst.pagedesigner.commands.DeleteAction; |
| import org.eclipse.jst.pagedesigner.commands.PasteAction; |
| import org.eclipse.jst.pagedesigner.dnd.internal.LocalSelectionDropTargetListener; |
| import org.eclipse.jst.pagedesigner.dnd.internal.PDTemplateTransferDropTargetListener; |
| import org.eclipse.jst.pagedesigner.dnd.internal.ResouceDropTargetListener; |
| import org.eclipse.jst.pagedesigner.editors.actions.ActionsMessages; |
| import org.eclipse.jst.pagedesigner.editors.actions.DesignerUndoRedoAction; |
| import org.eclipse.jst.pagedesigner.editors.actions.RelatedViewActionGroup; |
| import org.eclipse.jst.pagedesigner.editors.actions.SkinsMenuItemBuilder; |
| import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteCustomizer; |
| import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteRootFactory; |
| import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteViewerProvider; |
| import org.eclipse.jst.pagedesigner.editors.palette.IPaletteFactory; |
| import org.eclipse.jst.pagedesigner.jsp.core.internal.pagevar.DocumentPageVariableAdapter; |
| import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.PageVariableAdapterFactory; |
| import org.eclipse.jst.pagedesigner.parts.CSSStyleAdapterFactory; |
| import org.eclipse.jst.pagedesigner.parts.DocumentEditPart; |
| import org.eclipse.jst.pagedesigner.parts.HTMLEditPartsFactory; |
| import org.eclipse.jst.pagedesigner.parts.RefresherFactory; |
| import org.eclipse.jst.pagedesigner.utils.SelectionHelper; |
| import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer; |
| import org.eclipse.swt.events.MouseAdapter; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IFileEditorInput; |
| import org.eclipse.ui.IPageLayout; |
| import org.eclipse.ui.ISharedImages; |
| import org.eclipse.ui.IWorkbenchCommandConstants; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.actions.ActionContext; |
| import org.eclipse.wst.sse.core.internal.PropagatingAdapter; |
| import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener; |
| import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory; |
| import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; |
| import org.eclipse.wst.sse.core.internal.undo.IDocumentSelectionMediator; |
| import org.eclipse.wst.sse.core.internal.undo.UndoDocumentEvent; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; |
| |
| /** |
| * @author mengbo |
| */ |
| public class SimpleGraphicalEditor extends GraphicalEditorWithFlyoutPalette implements |
| IDesignViewer, IDocumentSelectionMediator { |
| |
| private HTMLEditor _delegate; |
| |
| private IHTMLGraphicalViewer _viewer; |
| |
| private IStructuredModel _model; |
| |
| /** Palette component, holding the tools and shapes. */ |
| private PaletteRoot _palette; |
| |
| private PaletteViewerPage _paletteViewerPage; |
| |
| private SelectionSynchronizer _synchronizer = new SelectionSynchronizer( |
| this); |
| |
| private IModelStateListener _internalModelListener = new IModelStateListener() { |
| public void modelAboutToBeChanged(IStructuredModel model) { |
| // do nothing |
| } |
| |
| public void modelChanged(IStructuredModel model) { |
| updateActionsWhenModelChange(); |
| } |
| |
| public void modelDirtyStateChanged(IStructuredModel model, |
| boolean isDirty) { |
| // do nothing |
| } |
| |
| public void modelResourceDeleted(IStructuredModel model) { |
| // do nothing |
| } |
| |
| public void modelResourceMoved(IStructuredModel oldModel, |
| IStructuredModel newModel) { |
| // do nothing |
| } |
| |
| public void modelAboutToBeReinitialized(IStructuredModel structuredModel) { |
| // do nothing |
| } |
| |
| public void modelReinitialized(IStructuredModel structuredModel) { |
| // do nothing |
| } |
| }; |
| |
| private PaletteViewerProvider _paletteViewerProvider; |
| |
| /** |
| * TODO: why isn't this private? |
| */ |
| protected IPaletteFactory _paletteViewerPageFactory; |
| |
| /** |
| * @param delegate |
| * @param editdomain |
| */ |
| public SimpleGraphicalEditor(HTMLEditor delegate, |
| DefaultEditDomain editdomain) { |
| _delegate = delegate; |
| initPaletteFactory(); |
| this.setEditDomain(editdomain); |
| } |
| |
| protected void createGraphicalViewer(Composite parent) { |
| _viewer = IHTMLGraphicalViewer.Factory.createGraphicalViewer(this); |
| Control control = _viewer.createControl(parent); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(control, |
| PDPlugin.getResourceString("SimpleGraphicalEditor.help.id")); //$NON-NLS-1$ |
| setGraphicalViewer(_viewer); |
| configureGraphicalViewer(); |
| hookGraphicalViewer(); |
| initializeGraphicalViewer(); |
| initializeContextMenu(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditor#dispose() |
| */ |
| public void dispose() { |
| if (_model != null) { |
| _model.getUndoManager().disconnect(this); |
| } |
| |
| super.dispose(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer() |
| */ |
| protected void initializeGraphicalViewer() { |
| ScalableRootEditPart rootEditPart = new ScalableRootEditPart(); |
| _viewer.setRootEditPart(rootEditPart); |
| |
| _viewer.getViewport().setContentsTracksWidth(true); |
| |
| _viewer.setKeyHandler(new GraphicalViewerKeyHandler(_viewer)); |
| |
| // initialize the viewer with input |
| // IStructuredModel sModel = |
| // StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForHTML.ContentTypeID_HTML); |
| // IDOMDocument designDoc = ((IDOMModel)sModel).getDocument(); |
| // HTMLEditPartsFactory factory = new HTMLEditPartsFactory(designDoc); |
| HTMLEditPartsFactory factory = new HTMLEditPartsFactory(null); |
| |
| _viewer.setEditPartFactory(factory); |
| |
| // for sync with source view. |
| |
| _viewer.addDropTargetListener(new LocalSelectionDropTargetListener( |
| _viewer)); |
| _viewer.addDropTargetListener(new PDTemplateTransferDropTargetListener( |
| _viewer)); |
| _viewer.addDropTargetListener(new ResouceDropTargetListener(_viewer)); |
| |
| // add double click support. |
| _viewer.getControl().addMouseListener(new MouseAdapter() { |
| public void mouseDoubleClick(MouseEvent e) { |
| try { |
| getSite().getPage().showView(IPageLayout.ID_PROP_SHEET); |
| } catch (PartInitException e1) { |
| // ignore |
| } |
| } |
| }); |
| |
| super.initializeGraphicalViewer(); |
| } |
| |
| /** |
| * |
| */ |
| protected void initializeContextMenu() { |
| Control gviewer = _viewer.getControl(); |
| MenuManager menuMgr = new MenuManager(); |
| menuMgr.setRemoveAllWhenShown(true); |
| Menu menu = menuMgr.createContextMenu(gviewer); |
| gviewer.setMenu(menu); |
| menuMgr.addMenuListener(new ContextMenuListener()); |
| getSite().registerContextMenu( |
| "HTMLVisualEditor.contextMenu", menuMgr, _viewer); //$NON-NLS-1$ |
| } |
| |
| private void updateActionsWhenModelChange() { |
| // update undo/redo action |
| IAction action = this.getAction(IWorkbenchCommandConstants.EDIT_UNDO); |
| ((UpdateAction) action).update(); |
| |
| action = this.getAction(IWorkbenchCommandConstants.EDIT_REDO); |
| ((UpdateAction) action).update(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditor#createActions() |
| */ |
| protected void createActions() { |
| super.createActions(); |
| ActionRegistry registry = getActionRegistry(); |
| ISharedImages sharedImages = PlatformUI.getWorkbench() |
| .getSharedImages(); |
| |
| IAction action; |
| |
| action = new DesignerUndoRedoAction(true, this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_UNDO)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_UNDO_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_UNDO); |
| action.setId(IWorkbenchCommandConstants.EDIT_UNDO); |
| getSite().getKeyBindingService().registerAction(action); |
| registry.registerAction(action); |
| |
| action = new DesignerUndoRedoAction(false, this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_REDO)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_REDO_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_REDO); |
| action.setId(IWorkbenchCommandConstants.EDIT_REDO); |
| getSite().getKeyBindingService().registerAction(action); |
| registry.registerAction(action); |
| |
| action = new DeleteAction(this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE); |
| action.setId(IWorkbenchCommandConstants.EDIT_DELETE); |
| getSite().getKeyBindingService().registerAction(action); |
| this.getSelectionActions().add(action.getId()); |
| registry.registerAction(action); |
| |
| action = new CopyAction(this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_COPY); |
| action.setId(IWorkbenchCommandConstants.EDIT_COPY); |
| getSite().getKeyBindingService().registerAction(action); |
| this.getSelectionActions().add(action.getId()); |
| registry.registerAction(action); |
| |
| action = new CutAction(this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_CUT); |
| action.setId(IWorkbenchCommandConstants.EDIT_CUT); |
| getSite().getKeyBindingService().registerAction(action); |
| this.getSelectionActions().add(action.getId()); |
| registry.registerAction(action); |
| |
| action = new PasteAction(this); |
| action.setImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); |
| action.setDisabledImageDescriptor(sharedImages |
| .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED)); |
| action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_PASTE); |
| action.setId(IWorkbenchCommandConstants.EDIT_PASTE); |
| getSite().getKeyBindingService().registerAction(action); |
| this.getSelectionActions().add(action.getId()); |
| registry.registerAction(action); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| public void doSave(IProgressMonitor monitor) { |
| if (_delegate != null) { |
| _delegate.doSave(monitor); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.ISaveablePart#doSaveAs() |
| */ |
| public void doSaveAs() { |
| if (_delegate != null) { |
| _delegate.doSaveAs(); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.ISaveablePart#isDirty() |
| */ |
| public boolean isDirty() { |
| if (_delegate != null) { |
| return _delegate.isDirty(); |
| } |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() |
| */ |
| public boolean isSaveAsAllowed() { |
| if (_delegate != null) { |
| return _delegate.isSaveAsAllowed(); |
| } |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.sybase.html.editor.IDesignViewer#setModel(com.ibm.sse.model.IStructuredModel) |
| */ |
| public void setModel(IStructuredModel model) { |
| if (_model != null) { |
| if (_model.getUndoManager() != null) |
| _model.getUndoManager().disconnect(this); |
| _model.removeModelStateListener(_internalModelListener); |
| } |
| |
| this._model = model; |
| |
| if (_model != null) { |
| _model.addModelStateListener(_internalModelListener); |
| if (_model.getUndoManager() != null) { |
| _model.getUndoManager().connect(this); |
| updateActionsWhenModelChange(); |
| } |
| } |
| |
| if (model instanceof IDOMModel) { |
| IDOMDocument doc = ((IDOMModel) model).getDocument(); |
| PropagatingAdapter adapter = (PropagatingAdapter) doc |
| .getAdapterFor(PropagatingAdapter.class); |
| if (adapter != null) { |
| INodeAdapterFactory factory = RefresherFactory.getInstance(); |
| adapter.addAdaptOnCreateFactory(factory); |
| adapter.initializeForFactory(factory, doc); |
| // CSSStyleAdapterFactory fac2 = |
| // CSSStyleAdapterFactory.getInstance(); |
| // adapter.addAdaptOnCreateFactory(fac2); |
| // adapter.initializeForFactory(fac2, doc); |
| } |
| ((IDOMModel) model).getFactoryRegistry().addFactory( |
| CSSStyleAdapterFactory.getInstance()); |
| |
| // _viewer.getDestDocumentForDesign().getModel().getFactoryRegistry().addFactory(CSSStyleAdapterFactory.getInstance()); |
| ((IDOMModel) model).getFactoryRegistry().addFactory( |
| new PageVariableAdapterFactory()); |
| doc.addAdapter(new DocumentPageVariableAdapter(doc)); |
| _viewer.setContents(((IDOMModel) model).getDocument()); |
| } else { |
| _viewer.setContents((EditPart) null); |
| } |
| } |
| |
| /** |
| * @return the selection synchronizer |
| */ |
| protected SelectionSynchronizer getSynchronizer() { |
| return _synchronizer; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditor#updateActions(java.util.List) |
| */ |
| protected void updateActions(List actionIds) { |
| super.updateActions(actionIds); |
| } |
| |
| /** |
| * @param id |
| * @return the action for the id |
| */ |
| public IAction getAction(Object id) { |
| // lium: following lines commented out, see comments in |
| // DesignerUndoRedoAction |
| // if (ITextEditorActionConstants.UNDO.equals(id) || |
| // ITextEditorActionConstants.REDO.equals(id)) |
| // { |
| // return _delegate.getTextEditor().getAction((String) id); |
| // } |
| return getActionRegistry().getAction(id); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#getPalettePreferences() |
| */ |
| protected FlyoutPreferences getPalettePreferences() { |
| return DesignerPaletteRootFactory.createPalettePreferences(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#getPaletteRoot() |
| */ |
| protected PaletteRoot getPaletteRoot() { |
| if (_palette == null) { |
| if (_paletteViewerPageFactory != null) { |
| _palette = _paletteViewerPageFactory.createPaletteRoot(_delegate.getEditorInput()); |
| } |
| if (_palette == null) { |
| _palette = DesignerPaletteRootFactory |
| .createPaletteRoot(getCurrentFile(_delegate.getEditorInput())); |
| } |
| } |
| return _palette; |
| |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#createPaletteViewerProvider() |
| */ |
| protected PaletteViewerProvider createPaletteViewerProvider() { |
| if (_paletteViewerProvider == null) { |
| if (_paletteViewerPageFactory != null) { |
| _paletteViewerProvider = _paletteViewerPageFactory.createPaletteViewerProvider(getEditDomain()); |
| } |
| if (_paletteViewerProvider == null) {//if still null |
| return new DesignerPaletteViewerProvider(getEditDomain()) { |
| protected void configurePaletteViewer(PaletteViewer viewer) { |
| super.configurePaletteViewer(viewer); |
| viewer.setCustomizer(new DesignerPaletteCustomizer()); |
| |
| // create a drag source listener for this palette viewer |
| // together with an appropriate transfer drop target listener, |
| // this will enable |
| // model element creation by dragging a |
| // CombinatedTemplateCreationEntries |
| // from the palette into the editor |
| // @see ShapesEditor#createTransferDropTargetListener() |
| viewer |
| .addDragSourceListener(new TemplateTransferDragSourceListener( |
| viewer)); |
| } |
| }; |
| } |
| } |
| return _paletteViewerProvider; |
| } |
| |
| /** |
| * @return the palette viewer page |
| */ |
| protected PaletteViewerPage createPaletteViewerPage() { |
| if (_paletteViewerPageFactory != null) { |
| _paletteViewerPage = _paletteViewerPageFactory.createPaletteViewerPage(createPaletteViewerProvider()); |
| } |
| if (_paletteViewerPage == null) { |
| DefaultEditDomain editDomain = getEditDomain(); |
| // PaletteItemManager manager = PaletteItemManager |
| // .getInstance(getCurrentFile(getEditorInput())); |
| // manager.reset(); |
| PaletteRoot paletteRoot = getPaletteRoot(); |
| editDomain.setPaletteRoot(paletteRoot); |
| |
| // _paletteViewerPage = (PaletteViewerPage) super.getAdapter(PalettePage.class); |
| // if possible, try to use the |
| if (_paletteViewerPage == null) |
| { |
| PaletteViewerProvider provider = getPaletteViewerProvider2(); |
| _paletteViewerPage = new PaletteViewerPage(provider); |
| } |
| } |
| return _paletteViewerPage; |
| } |
| |
| PaletteViewerProvider getPaletteViewerProvider2() |
| { |
| return getPaletteViewerProvider(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jst.pagedesigner.editors.IDesignViewer#getGraphicViewer() |
| */ |
| public IHTMLGraphicalViewer getGraphicViewer() { |
| return _viewer; |
| } |
| |
| /** |
| * @return the html editor delegate |
| */ |
| public HTMLEditor getHTMLEditor() { |
| return _delegate; |
| } |
| |
| // private IProject getCurrentProject(IEditorInput input) { |
| // IProject curProject = null; |
| // IFile inputFile = null; |
| // if (input instanceof IFileEditorInput) { |
| // inputFile = ((IFileEditorInput) input).getFile(); |
| // curProject = inputFile.getProject(); |
| // } |
| // return curProject; |
| // } |
| |
| private IFile getCurrentFile(IEditorInput input) { |
| IFile inputFile = null; |
| if (input instanceof IFileEditorInput) { |
| inputFile = ((IFileEditorInput) input).getFile(); |
| } |
| return inputFile; |
| } |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, |
| * org.eclipse.jface.viewers.ISelection) |
| */ |
| public void selectionChanged(IWorkbenchPart part, ISelection selection) { |
| if (_viewer != null) { |
| GraphicalViewer viewerViewer = getGraphicalViewer(); |
| if (viewerViewer != null && viewerViewer.getControl() != null |
| && viewerViewer.getControl().isFocusControl()) { |
| updateActions(getSelectionActions()); |
| if (selection instanceof IStructuredSelection && // |
| !(((IStructuredSelection) selection).getFirstElement() instanceof DocumentEditPart)) { |
| ((IHTMLGraphicalViewer) viewerViewer) |
| .updateRangeSelection(selection); |
| } |
| } |
| } else { |
| super.selectionChanged(part, selection); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.sse.core.internal.undo.IDocumentSelectionMediator#getDocument() |
| */ |
| public IDocument getDocument() { |
| if (_model != null) { |
| return _model.getStructuredDocument(); |
| } |
| return null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.sse.core.internal.undo.IDocumentSelectionMediator#undoOperationSelectionChanged(org.eclipse.wst.sse.core.internal.undo.UndoDocumentEvent) |
| */ |
| public void undoOperationSelectionChanged(UndoDocumentEvent event) { |
| IDocumentSelectionMediator requester = event.getRequester(); |
| if (this == requester) { |
| // ok, the undo/redo operation is initialized by designer page. |
| // we should set selection in designer. |
| // However, when this method is called, the modelChanged event is |
| // not fired yet, so the |
| // editpart hasn't refreshed yet. So we register a |
| // modelStateListener, and do the selection |
| // in modelChangedEvent. (lium) |
| final int offset = event.getOffset(); |
| final int length = event.getLength(); |
| |
| _model.addModelStateListener(new IModelStateListener() { |
| public void modelAboutToBeChanged(IStructuredModel model) { |
| // nothing to do |
| } |
| |
| public void modelChanged(IStructuredModel model) { |
| _model.removeModelStateListener(this); |
| ISelection sel = SelectionHelper |
| .convertToDesignerSelection(getGraphicViewer(), |
| offset, length); |
| if (sel != null) { |
| getGraphicViewer().setSelection(sel); |
| } |
| } |
| |
| public void modelDirtyStateChanged(IStructuredModel model, |
| boolean isDirty) { |
| // do nothing |
| } |
| |
| public void modelResourceDeleted(IStructuredModel model) { |
| // do nothign |
| } |
| |
| public void modelResourceMoved(IStructuredModel oldModel, |
| IStructuredModel newModel) { |
| // do nothing |
| } |
| |
| public void modelAboutToBeReinitialized( |
| IStructuredModel structuredModel) { |
| // do nothing |
| } |
| |
| public void modelReinitialized(IStructuredModel structuredModel) { |
| // do nothing |
| } |
| }); |
| } |
| } |
| |
| private final class ContextMenuListener implements IMenuListener |
| { |
| public void menuAboutToShow(IMenuManager menuMgr1) |
| { |
| // add standarized sub-menus |
| addEditSubMenu(menuMgr1); |
| addSelectSubMenu(menuMgr1); |
| addInsertSubMenu(menuMgr1); |
| /* |
| * Bug 172959 - [WPE] WPE context menu Navigate->Java->Value doesn't work.. |
| * |
| addNavigateSubMenu(menuMgr1); |
| */ |
| addStyleSubMenu(menuMgr1); |
| |
| // add separators that mark standard append locations in the main |
| // context menu |
| PageDesignerActionConstants.addStandardActionGroups(menuMgr1); |
| |
| // TODO: Run/Debug? |
| |
| // insert ElementEdit contributed menu items |
| final ContainerActionGroup containerActionGroup = |
| new ContainerActionGroup(); |
| ActionContext context = new ActionContext(_viewer |
| .getSelection()); |
| context.setInput(_viewer); |
| containerActionGroup.setContext(context); |
| containerActionGroup.fillContextMenu(menuMgr1); |
| containerActionGroup.setContext(null); |
| |
| // TODO: TableActionGroup |
| |
| // if on a text context, (instead of a ElementEditPart), |
| // add text styling actions |
| final RangeActionGroup rangeActionGroup = new RangeActionGroup(); |
| context = new ActionContext(_viewer.getSelection()); |
| context.setInput(_viewer); |
| rangeActionGroup.setContext(context); |
| rangeActionGroup.fillContextMenu(menuMgr1); |
| rangeActionGroup.setContext(null); |
| |
| // Add actions for single ElementEditPart's that are common |
| // to all |
| final SingleElementActionGroup singleActionGroup = |
| new SingleElementActionGroup(); |
| singleActionGroup.setContext(new ActionContext(_viewer |
| .getSelection())); |
| singleActionGroup.fillContextMenu(menuMgr1); |
| singleActionGroup.setContext(null); |
| |
| // add "Show In" actions... |
| final RelatedViewActionGroup viewMenu = new RelatedViewActionGroup(getEditDomain()); |
| context = new ActionContext(_viewer.getSelection()); |
| viewMenu.setContext(context); |
| viewMenu.fillContextMenu(menuMgr1); |
| |
| // add extension point contributed menu actions |
| CustomedContextMenuActionGroup customedMenu = new CustomedContextMenuActionGroup(); |
| customedMenu.setContext(new ActionContext(_viewer |
| .getSelection())); |
| customedMenu.setModel(_model); |
| customedMenu.setParentControl(_viewer.getControl()); |
| customedMenu.fillContextMenu(menuMgr1); |
| customedMenu.setContext(null); |
| customedMenu.setParentControl(null); |
| customedMenu.setModel(null); |
| |
| //add skins menu |
| IEditorInput editorInput = _delegate.getEditorInput(); |
| if (editorInput instanceof IFileEditorInput) { |
| IFile file = ((IFileEditorInput)editorInput).getFile(); |
| IProject project = file.getProject(); |
| if (project != null) { |
| SkinsMenuItemBuilder builder = new SkinsMenuItemBuilder(project); |
| builder.buildMenuManagers(menuMgr1); |
| } |
| } |
| } |
| |
| /* |
| * Bug 172959 - [WPE] WPE context menu Navigate->Java->Value doesn't work.. |
| * |
| private void addNavigateSubMenu(IMenuManager menu) { |
| final IMenuManager navigateSubmenu = |
| new MenuManager(ActionsMessages.getString("Navigate.Menu") //$NON-NLS-1$ |
| , PageDesignerActionConstants.NAVIGATE_SUBMENU_ID); |
| menu.add(navigateSubmenu); |
| PageDesignerActionConstants.addStandardNavigateActionGroups(navigateSubmenu); |
| } |
| */ |
| |
| private void addEditSubMenu(IMenuManager menu) |
| { |
| final IMenuManager editSubmenu |
| = new MenuManager(ActionsMessages.getString("Edit.Menu") //$NON-NLS-1$ |
| , PageDesignerActionConstants.EDIT_SUBMENU_ID); |
| menu.add(editSubmenu); |
| PageDesignerActionConstants.addStandardEditActionGroups(editSubmenu); |
| |
| // FIXME: for UNDO/REDO, maybe need also wrap them in |
| // DesignerCommand. |
| // otherwise don't have validate() called after the source |
| // change. |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_UNDO, |
| getAction(IWorkbenchCommandConstants.EDIT_UNDO)); |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_UNDO, |
| getAction(IWorkbenchCommandConstants.EDIT_REDO)); |
| |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_EDIT, |
| getAction(IWorkbenchCommandConstants.EDIT_CUT)); |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_EDIT, |
| getAction(IWorkbenchCommandConstants.EDIT_COPY)); |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_EDIT, |
| getAction(IWorkbenchCommandConstants.EDIT_PASTE)); |
| editSubmenu.appendToGroup(PageDesignerActionConstants.GROUP_EDIT, |
| getAction(IWorkbenchCommandConstants.EDIT_DELETE)); |
| |
| } |
| |
| private void addStyleSubMenu(IMenuManager menu) |
| { |
| final IMenuManager styleSubmenu = |
| new MenuManager(ActionsMessages.getString("Style.Menu") //$NON-NLS-1$ |
| , PageDesignerActionConstants.STYLE_SUBMENU_ID); |
| menu.add(styleSubmenu); |
| PageDesignerActionConstants.addStandardStyleActionGroups(styleSubmenu); |
| } |
| private void addInsertSubMenu(IMenuManager menu) { |
| final IMenuManager insertSubmenu = |
| new MenuManager(ActionsMessages.getString("Insert.Menu") //$NON-NLS-1$ |
| , PageDesignerActionConstants.INSERT_SUBMENU_ID); |
| menu.add(insertSubmenu); |
| PageDesignerActionConstants.addStandardInsertActionGroups(insertSubmenu); |
| } |
| |
| private void addSelectSubMenu(IMenuManager menu) |
| { |
| final IMenuManager selectSubMenu = |
| new MenuManager(ActionsMessages.getString("Select.Menu") //$NON-NLS-1$ |
| , PageDesignerActionConstants.SELECT_SUBMENU_ID); |
| menu.add(selectSubMenu); |
| PageDesignerActionConstants.addStandardSelectActionGroups(selectSubMenu); |
| } |
| } |
| |
| |
| /** |
| * @return the palette viewer page |
| */ |
| public PaletteViewerPage getPaletteViewerPage() { |
| if (_paletteViewerPage == null) { |
| _paletteViewerPage = createPaletteViewerPage(); |
| } |
| return _paletteViewerPage; |
| } |
| |
| /** |
| * @return the palette factory |
| */ |
| protected IPaletteFactory initPaletteFactory() |
| { |
| if (_paletteViewerPageFactory == null) { |
| //List<IElementEditFactory> result = new ArrayList<IElementEditFactory>(); |
| IExtensionPoint extensionPoint = Platform.getExtensionRegistry() |
| .getExtensionPoint(PDPlugin.getPluginId(), |
| IJMTConstants.EXTENSION_POINT_PAGEDESIGNER); |
| IExtension[] extensions = extensionPoint.getExtensions(); |
| |
| for (int i = 0; i < extensions.length; i++) |
| { |
| IExtension ext = extensions[i]; |
| IConfigurationElement[] elementEditElement = ext |
| .getConfigurationElements(); |
| |
| for (int j = 0; j < elementEditElement.length; j++) |
| { |
| final IConfigurationElement element = elementEditElement[j]; |
| if (element.getName().equals( |
| IJMTConstants.PALETTE_FACTORY)) |
| { |
| elementEditElement[j].getAttribute("class"); //$NON-NLS-1$ |
| Object obj; |
| try |
| { |
| obj = elementEditElement[j] |
| .createExecutableExtension("class"); //$NON-NLS-1$ |
| |
| // TODO: we need a policy based solution here, |
| // but this will do for now |
| if (obj instanceof IPaletteFactory) |
| { |
| _paletteViewerPageFactory = (IPaletteFactory) obj; |
| } |
| } |
| catch (CoreException e) |
| { |
| PDPlugin.log("Problem loading element edit extension for "+element.toString(), e); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| } |
| return _paletteViewerPageFactory; |
| } |
| // |
| // @Override |
| // public Object getAdapter(Class type) { |
| // if (type == PalettePage.class) { |
| // return getPaletteViewerPage(); |
| // } |
| // return super.getAdapter(type); |
| // } |
| |
| |
| |
| } |