| /******************************************************************************* |
| * 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.actions; |
| |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.IStatusLineManager; |
| import org.eclipse.jface.action.IToolBarManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jst.pagedesigner.IJMTConstants; |
| import org.eclipse.jst.pagedesigner.editors.HTMLEditor; |
| import org.eclipse.jst.pagedesigner.editors.SimpleGraphicalEditor; |
| import org.eclipse.jst.pagedesigner.ui.common.sash.NestedEditorActionBarContributor; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.wst.sse.ui.StructuredTextEditor; |
| import org.eclipse.wst.sse.ui.internal.ExtendedEditorActionBuilder; |
| import org.eclipse.wst.sse.ui.internal.IExtendedContributor; |
| import org.eclipse.wst.sse.ui.internal.ISourceViewerActionBarContributor; |
| |
| /** |
| * This is the actionbar contributor for HTML Editor. As HTMLEditor is |
| * multipaged, so this contributor will also handle on which page currently is |
| * activated. |
| * |
| * @author mengbo |
| */ |
| public class PageDesignerActionBarContributor2 extends |
| NestedEditorActionBarContributor implements IExtendedContributor { |
| |
| private DesignPageActionContributor _designViewerActionBarContributor = null; |
| |
| private ISourceViewerActionBarContributor _sourceViewerActionContributor = null; |
| |
| private HTMLEditor _htmlEditor = null; |
| |
| // EditorExtension |
| private static final String EDITOR_ID = IJMTConstants.EDITORID_HTML; |
| |
| private IExtendedContributor _extendedContributor; |
| |
| private DesignerStyleActionGroup _group = new DesignerStyleActionGroup(); |
| |
| /** |
| * Default constructor |
| */ |
| public PageDesignerActionBarContributor2() { |
| super(); |
| |
| _sourceViewerActionContributor = new SourcePageActionContributor(); |
| _designViewerActionBarContributor = new DesignPageActionContributor(); |
| |
| // Read action extensions. |
| ExtendedEditorActionBuilder builder = new ExtendedEditorActionBuilder(); |
| _extendedContributor = builder.readActionExtensions(EDITOR_ID); |
| } |
| |
| public void init(IActionBars actionBars) { |
| super.init(actionBars); |
| |
| if (actionBars != null) { |
| initCommonActionBarContributor(actionBars); |
| actionBars.getToolBarManager().add(new ManageSkinsAction()); |
| actionBars.getToolBarManager().add(new Separator()); |
| initDesignViewerActionBarContributor(actionBars); |
| initSourceViewerActionContributor(actionBars); |
| } |
| } |
| |
| /** |
| * @param actionBars |
| */ |
| private void initCommonActionBarContributor(IActionBars actionBars) { |
| _group.fillActionBars(actionBars); |
| } |
| |
| /** |
| * @param actionBars |
| */ |
| protected void initDesignViewerActionBarContributor(IActionBars actionBars) { |
| if (_designViewerActionBarContributor != null) |
| _designViewerActionBarContributor.init(actionBars, getPage()); |
| } |
| |
| /** |
| * @param actionBars |
| */ |
| protected void initSourceViewerActionContributor(IActionBars actionBars) { |
| if (_sourceViewerActionContributor != null) |
| _sourceViewerActionContributor.init(actionBars, getPage()); |
| } |
| |
| public void dispose() { |
| super.dispose(); |
| if (_designViewerActionBarContributor != null) { |
| _designViewerActionBarContributor.dispose(); |
| } |
| if (_sourceViewerActionContributor != null) { |
| _sourceViewerActionContributor.dispose(); |
| } |
| if (_extendedContributor != null) { |
| _extendedContributor.dispose(); |
| } |
| if (_group != null) { |
| _group.dispose(); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(IMenuManager) |
| */ |
| public final void contributeToMenu(IMenuManager menu) { |
| super.contributeToMenu(menu); |
| addToMenu(menu); |
| if (_extendedContributor != null) |
| _extendedContributor.contributeToMenu(menu); |
| } |
| |
| private void addToMenu(IMenuManager menu) { |
| // IMenuManager menuMgr = new MenuManager(PD_EDITOR_MENU_LABEL, |
| // IJMTConstants.PD_EDITOR_MENU_ID); |
| // menu.insertBefore(IWorkbenchActionConstants.M_NAVIGATE, menuMgr); |
| // |
| // menuMgr.add(action); |
| // menuMgr.setRemoveAllWhenShown(true); |
| // |
| // menuMgr.addMenuListener(new IMenuListener() |
| // { |
| // public void menuAboutToShow(IMenuManager menuMgr) |
| // { |
| // PageDesignerActionConstants.addStandardActionGroups(menuMgr); |
| // RelatedViewActionGroup viewMenu = new RelatedViewActionGroup(); |
| // viewMenu.fillContextMenu(menuMgr); |
| // updateEditorMenu(menuMgr); |
| // } |
| // }); |
| } |
| |
| /** |
| * @see IExtendedContributor#contributeToPopupMenu(IMenuManager) |
| */ |
| public final void contributeToPopupMenu(IMenuManager menu) { |
| // TODO: this method is empty addToPopupMenu(menu); |
| if (_extendedContributor != null) |
| _extendedContributor.contributeToPopupMenu(menu); |
| } |
| |
| // protected void addToPopupMenu(IMenuManager menu) { |
| // // do nothing |
| // } |
| |
| /** |
| * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToToolBar(IToolBarManager) |
| */ |
| public final void contributeToToolBar(IToolBarManager toolBarManager) { |
| super.contributeToToolBar(toolBarManager); |
| // TODO: this method is empty addToToolBar(toolBarManager); |
| if (_extendedContributor != null) |
| _extendedContributor.contributeToToolBar(toolBarManager); |
| } |
| |
| // protected void addToToolBar(IToolBarManager toolBarManager) { |
| // } |
| |
| /** |
| * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToStatusLine(IStatusLineManager) |
| */ |
| public final void contributeToStatusLine(IStatusLineManager manager) { |
| super.contributeToStatusLine(manager); |
| // TODO: this method does nothing addToStatusLine(manager); |
| if (_extendedContributor != null) |
| _extendedContributor.contributeToStatusLine(manager); |
| } |
| |
| // protected void addToStatusLine(IStatusLineManager manager) { |
| // } |
| |
| /** |
| * @see IExtendedContributor#updateToolbarActions() |
| */ |
| public void updateToolbarActions() { |
| if (_extendedContributor != null) { |
| _extendedContributor.updateToolbarActions(); |
| } |
| _group.setHTMLEditor(_htmlEditor); |
| } |
| |
| public void setActiveEditor(IEditorPart targetEditor) { |
| if (targetEditor instanceof HTMLEditor) { |
| _htmlEditor = (HTMLEditor) targetEditor; |
| _htmlEditor.setDesignPageActionContributor(_designViewerActionBarContributor); |
| //StructuredTextEditor textEditor = _htmlEditor.getTextEditor(); |
| // TODO: never read this._model = textEditor.getModel(); |
| } |
| super.setActiveEditor(targetEditor); |
| updateToolbarActions(); |
| if (_extendedContributor != null) |
| _extendedContributor.setActiveEditor(targetEditor); |
| } |
| |
| public void setInnerActivePage(IEditorPart activeEditor) { |
| // This contributor is designed for StructuredTextMultiPageEditorPart. |
| // To safe-guard this from problems caused by unexpected usage by |
| // other editors, the following |
| // check is added. |
| if (_htmlEditor != null) { |
| if (activeEditor instanceof StructuredTextEditor) { |
| activateSourcePage((StructuredTextEditor) activeEditor); |
| } else if (activeEditor instanceof SimpleGraphicalEditor) { |
| //SimpleGraphicalEditor graphEditor = (SimpleGraphicalEditor) activeEditor; |
| activateDesignPage((SimpleGraphicalEditor) activeEditor); |
| // TODO: never read this._viewer = graphEditor.getGraphicViewer(); |
| } else { |
| // currently we don't have special action for preview. |
| deactivateSourceAndDesignPage(activeEditor); |
| // TODO: never read this._viewer = null; |
| } |
| } |
| |
| updateToolbarActions(); |
| |
| IActionBars actionBars = getActionBars(); |
| if (actionBars != null) { |
| // update menu bar and tool bar |
| actionBars.updateActionBars(); |
| } |
| } |
| |
| /** |
| * @param activeEditor |
| * |
| */ |
| protected void deactivateSourceAndDesignPage(IEditorPart activeEditor) { |
| if (_designViewerActionBarContributor != null) { |
| _designViewerActionBarContributor.setActiveEditor(_htmlEditor); |
| _designViewerActionBarContributor |
| .setViewerSpecificContributionsEnabled(false); |
| } |
| if (_sourceViewerActionContributor != null) { |
| _sourceViewerActionContributor.setActiveEditor(_htmlEditor); |
| _sourceViewerActionContributor |
| .setViewerSpecificContributionsEnabled(false); |
| } |
| } |
| |
| /** |
| * @param activeEditor |
| */ |
| protected void activateDesignPage(SimpleGraphicalEditor activeEditor) { |
| |
| if (_sourceViewerActionContributor != null /* |
| * && |
| * _sourceViewerActionContributor |
| * instanceof |
| * ISourceViewerActionBarContributor |
| */) { |
| // previously I was trying setActiveEditor(null) here. But as in the |
| // super class will |
| // compare the editor with original one, if same then directly |
| // return. So will not disable |
| // those actions. (lium) |
| _sourceViewerActionContributor.setActiveEditor(_htmlEditor); |
| _sourceViewerActionContributor |
| .setViewerSpecificContributionsEnabled(false); |
| } |
| |
| if (_designViewerActionBarContributor != null) { |
| _designViewerActionBarContributor.setActiveEditor(activeEditor); |
| _designViewerActionBarContributor |
| .setViewerSpecificContributionsEnabled(true); |
| } |
| } |
| |
| /** |
| * @param activeEditor |
| */ |
| protected void activateSourcePage(StructuredTextEditor activeEditor) { |
| if (_designViewerActionBarContributor != null /* |
| * && |
| * _designViewerActionBarContributor |
| * instanceof |
| * IDesignViewerActionBarContributor |
| */) { |
| // _designViewerActionBarContributor only recogonize HTMLEditor and |
| // its own GraphicEditor. so not setting source editor to it. |
| _designViewerActionBarContributor.setActiveEditor(_htmlEditor); |
| _designViewerActionBarContributor |
| .setViewerSpecificContributionsEnabled(false); |
| } |
| |
| if (_sourceViewerActionContributor != null /* |
| * && |
| * _sourceViewerActionContributor |
| * instanceof |
| * ISourceViewerActionBarContributor |
| */) { |
| _sourceViewerActionContributor.setActiveEditor(activeEditor); |
| _sourceViewerActionContributor.setViewerSpecificContributionsEnabled(true); |
| } |
| } |
| |
| // TODO: dead? |
| // private void updateEditorMenu(IMenuManager menuMgr) { |
| // if (this._viewer == null) { |
| // return; |
| // } else { |
| // if (menuMgr != null) { |
| // ContainerActionGroup containerActionGroup = new ContainerActionGroup(); |
| // ActionContext context = new ActionContext(this._viewer |
| // .getSelection()); |
| // context.setInput(this._viewer); |
| // containerActionGroup.setContext(context); |
| // containerActionGroup.fillContextMenu(menuMgr); |
| // containerActionGroup.setContext(null); |
| // |
| // RangeActionGroup rangeActionGroup = new RangeActionGroup(); |
| // context = new ActionContext(this._viewer.getSelection()); |
| // context.setInput(this._viewer); |
| // rangeActionGroup.setContext(context); |
| // rangeActionGroup.fillContextMenu(menuMgr); |
| // rangeActionGroup.setContext(null); |
| // |
| // SingleElementActionGroup singleActionGroup = new SingleElementActionGroup(); |
| // singleActionGroup.setContext(new ActionContext(this._viewer |
| // .getSelection())); |
| // singleActionGroup.fillContextMenu(menuMgr); |
| // singleActionGroup.setContext(null); |
| // |
| // if (this._model != null) { |
| // CustomedContextMenuActionGroup customedMenu = new CustomedContextMenuActionGroup(); |
| // customedMenu.setContext(new ActionContext(_viewer |
| // .getSelection())); |
| // customedMenu.setModel(_model); |
| // customedMenu.setParentControl(_viewer.getControl()); |
| // customedMenu.fillContextMenu(menuMgr); |
| // customedMenu.setContext(null); |
| // customedMenu.setParentControl(null); |
| // customedMenu.setModel(null); |
| // } |
| // } |
| // } |
| // } |
| } |