[122340] DTD Outline context menu missing
diff --git a/bundles/org.eclipse.wst.dtd.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.dtd.core/META-INF/MANIFEST.MF index adc2aa8..eb1635a 100644 --- a/bundles/org.eclipse.wst.dtd.core/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.wst.dtd.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wst.dtd.core; singleton:=true -Bundle-Version: 1.0.0 +Bundle-Version: 1.0.1 Bundle-Activator: org.eclipse.wst.dtd.core.internal.DTDCorePlugin Bundle-Vendor: %providerName Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/Element.java b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/Element.java index 989b57e..04904e5 100644 --- a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/Element.java +++ b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/Element.java
@@ -30,7 +30,7 @@ List attributes = new ArrayList(); - protected CMNode contentModel; + protected CMNode fContentModel; public Element(DTDFile dtdFile, IStructuredDocumentRegion flatNode) { super(dtdFile, flatNode, DTDRegionTypes.ELEMENT_TAG); @@ -130,9 +130,12 @@ } public void replaceContentModel(Object requestor, CMNode node) { + replaceContentModel(requestor, node.getNodeText()); + } + + public void replaceContentModel(Object requestor, String nodeText) { int offset = 0; int length = 0; - String nodeText = node.getNodeText(); CMNode contentModel = getContentModel(); if (contentModel != null) { offset = contentModel.getStartOffset(); @@ -147,7 +150,7 @@ public void resolveRegions() { // System.out.println("element node stream = " + // tokenStream.getString()); - contentModel = null; + fContentModel = null; removeChildNodes(); RegionIterator iter = iterator(); @@ -159,22 +162,22 @@ while (iter.hasNext()) { ITextRegion currentRegion = iter.next(); - if (contentModel == null) { + if (fContentModel == null) { if (currentRegion.getType().equals(DTDRegionTypes.NAME)) { - contentModel = new CMBasicNode(getDTDFile(), getStructuredDTDDocumentRegion()); + fContentModel = new CMBasicNode(getDTDFile(), getStructuredDTDDocumentRegion()); } else if (currentRegion.getType().equals(DTDRegionTypes.CONTENT_PCDATA)) { - contentModel = new CMBasicNode(getDTDFile(), getStructuredDTDDocumentRegion()); + fContentModel = new CMBasicNode(getDTDFile(), getStructuredDTDDocumentRegion()); } else if (currentRegion.getType().equals(DTDRegionTypes.LEFT_PAREN)) { - contentModel = new CMGroupNode(getDTDFile(), getStructuredDTDDocumentRegion()); + fContentModel = new CMGroupNode(getDTDFile(), getStructuredDTDDocumentRegion()); } } - if (contentModel != null) { + if (fContentModel != null) { if (!currentRegion.getType().equals(DTDRegionTypes.END_TAG)) { // content model gets all regions except for the '>' - contentModel.addRegion(currentRegion); + fContentModel.addRegion(currentRegion); } else { // if it is equal to the end tag, then don't add anymore @@ -186,17 +189,17 @@ } } - if (contentModel != null) { - appendChild(contentModel); + if (fContentModel != null) { + appendChild(fContentModel); // this is the root element content so set it true - contentModel.setRootElementContent(true); + fContentModel.setRootElementContent(true); // now tell the content model to resolve it's regions - contentModel.resolveRegions(); + fContentModel.resolveRegions(); } } public void setContentModel(CMNode contentModel) { - this.contentModel = contentModel; + this.fContentModel = contentModel; } }
diff --git a/bundles/org.eclipse.wst.dtd.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.dtd.ui/META-INF/MANIFEST.MF index 1d26844..ebc987d 100644 --- a/bundles/org.eclipse.wst.dtd.ui/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.wst.dtd.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wst.dtd.ui; singleton:=true -Bundle-Version: 1.0.0 +Bundle-Version: 1.0.1 Bundle-Activator: org.eclipse.wst.dtd.ui.internal.DTDUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeAction.java index 736591d..db4936f 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeAction.java
@@ -18,13 +18,13 @@ import org.eclipse.wst.dtd.core.internal.AttributeList; import org.eclipse.wst.dtd.core.internal.DTDNode; import org.eclipse.wst.dtd.core.internal.Element; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddAttributeAction extends BaseAction { - public AddAttributeAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddAttributeAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeListAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeListAction.java index e03f0dc..784251a 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeListAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddAttributeListAction.java
@@ -17,13 +17,13 @@ import org.eclipse.wst.dtd.core.internal.DTDFile; import org.eclipse.wst.dtd.core.internal.DTDNode; import org.eclipse.wst.dtd.core.internal.Element; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddAttributeListAction extends BaseAction { - public AddAttributeListAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddAttributeListAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddCommentAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddCommentAction.java index 303e916..e6c6976 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddCommentAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddCommentAction.java
@@ -16,13 +16,13 @@ import org.eclipse.wst.dtd.core.internal.DTDNode; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddCommentAction extends BaseAction { - public AddCommentAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddCommentAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementAction.java index caaf3b4..108a36a 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementAction.java
@@ -14,14 +14,14 @@ import org.eclipse.wst.dtd.core.internal.DTDFile; import org.eclipse.wst.dtd.core.internal.DTDNode; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; import org.eclipse.wst.dtd.core.internal.util.DTDUniqueNameHelper; -import org.eclipse.wst.sse.ui.StructuredTextEditor; public class AddElementAction extends BaseAction { - public AddElementAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddElementAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementToContentModelAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementToContentModelAction.java index 3176640..403026b 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementToContentModelAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddElementToContentModelAction.java
@@ -18,13 +18,13 @@ import org.eclipse.wst.dtd.core.internal.CMGroupNode; import org.eclipse.wst.dtd.core.internal.DTDNode; import org.eclipse.wst.dtd.core.internal.Element; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddElementToContentModelAction extends BaseAction { - public AddElementToContentModelAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddElementToContentModelAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddEntityAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddEntityAction.java index 54be4d7..4b14bfc 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddEntityAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddEntityAction.java
@@ -16,13 +16,13 @@ import org.eclipse.wst.dtd.core.internal.DTDNode; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddEntityAction extends BaseAction { - public AddEntityAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddEntityAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddGroupToContentModelAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddGroupToContentModelAction.java index 728fb3b..72e6e8e 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddGroupToContentModelAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddGroupToContentModelAction.java
@@ -17,15 +17,13 @@ import org.eclipse.wst.dtd.core.internal.CMGroupNode; import org.eclipse.wst.dtd.core.internal.DTDNode; import org.eclipse.wst.dtd.core.internal.Element; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddGroupToContentModelAction extends BaseAction { - // private Object element; - - public AddGroupToContentModelAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddGroupToContentModelAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddNotationAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddNotationAction.java index 1321726..fb1f071 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddNotationAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddNotationAction.java
@@ -15,13 +15,13 @@ package org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions; import org.eclipse.wst.dtd.core.internal.DTDNode; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; public class AddNotationAction extends BaseAction { - public AddNotationAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddNotationAction(DTDModelImpl model, String label) { + super(model, label); } public void run() {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddParameterEntityReferenceAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddParameterEntityReferenceAction.java index 53f9b07..4c38894 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddParameterEntityReferenceAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/AddParameterEntityReferenceAction.java
@@ -16,13 +16,13 @@ import org.eclipse.wst.dtd.core.internal.DTDFile; import org.eclipse.wst.dtd.core.internal.DTDNode; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; import org.eclipse.wst.dtd.core.internal.util.LabelValuePair; -import org.eclipse.wst.sse.ui.StructuredTextEditor; public class AddParameterEntityReferenceAction extends BaseAction { - public AddParameterEntityReferenceAction(StructuredTextEditor editor, String label) { - super(editor, label); + public AddParameterEntityReferenceAction(DTDModelImpl model, String label) { + super(model, label); } public String getFirstExternalParameterEntity(DTDFile dtdFile) {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/BaseAction.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/BaseAction.java index 5c32081..158737c 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/BaseAction.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/internal/views/contentoutline/actions/BaseAction.java
@@ -22,33 +22,29 @@ import org.eclipse.ui.actions.SelectionListenerAction; import org.eclipse.wst.dtd.core.internal.DTDNode; import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; -import org.eclipse.wst.sse.ui.StructuredTextEditor; +import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; abstract public class BaseAction extends SelectionListenerAction { protected IEditorActionBarContributor contextContributor; - private StructuredTextEditor fTextEditor; + private IStructuredModel fModel; - public BaseAction(StructuredTextEditor editor, String text) { - this(editor, text, null); + public BaseAction(IStructuredModel model, String text) { + this(model, text, null); } - public BaseAction(StructuredTextEditor editor, String text, ImageDescriptor imageDesc) { + public BaseAction(IStructuredModel model, String text, ImageDescriptor imageDesc) { super(text); - fTextEditor = editor; + fModel = model; setImageDescriptor(imageDesc); } - public IEditorActionBarContributor getContextContributor() { - return contextContributor; - } - - public DTDNode getFirstNodeSelected() { + protected DTDNode getFirstNodeSelected() { return getFirstNodeSelected(getStructuredSelection()); } - public DTDNode getFirstNodeSelected(IStructuredSelection selection) { + protected DTDNode getFirstNodeSelected(IStructuredSelection selection) { Iterator iter = selection.iterator(); // DTDNode referencePoint = null; while (iter.hasNext()) { @@ -60,15 +56,8 @@ return null; } - public DTDModelImpl getModel() { - return (DTDModelImpl) getTextEditor().getModel(); - } - - /** - * @return Returns the textEditor. - */ - public StructuredTextEditor getTextEditor() { - return fTextEditor; + protected DTDModelImpl getModel() { + return (DTDModelImpl) fModel; } public void setContextContributor(IEditorActionBarContributor contributor) {
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContentOutlineConfiguration.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContentOutlineConfiguration.java index d3ac8b8..ce87173 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContentOutlineConfiguration.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContentOutlineConfiguration.java
@@ -29,6 +29,7 @@ import org.eclipse.wst.common.ui.internal.dnd.ObjectTransfer; import org.eclipse.wst.common.ui.internal.dnd.ViewerDragAdapter; import org.eclipse.wst.common.ui.internal.dnd.ViewerDropAdapter; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; import org.eclipse.wst.dtd.ui.internal.DTDUIPlugin; import org.eclipse.wst.dtd.ui.internal.dnd.DTDDragAndDropManager; import org.eclipse.wst.sse.ui.internal.contentoutline.PropertyChangeUpdateActionContributionItem; @@ -122,14 +123,15 @@ * @see org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration#getMenuListener(org.eclipse.jface.viewers.TreeViewer) */ public IMenuListener getMenuListener(TreeViewer viewer) { - if (fMenuHelper == null) { - // fMenuHelper = new DTDContextMenuHelper(getEditor()); - // System.out.println("DTDContextMenuHelper not implemented"); - // //$NON-NLS-1$ + IMenuListener listener = null; + if (fMenuHelper == null && viewer.getInput() instanceof DTDModelImpl) { + fMenuHelper = new DTDContextMenuHelper((DTDModelImpl) viewer.getInput()); + fMenuHelper.createMenuListenersFor(viewer); } - // fMenuHelper.createMenuListenersFor(viewer); - // return fMenuHelper.getMenuListener(); - return null; + if (fMenuHelper != null) { + listener = fMenuHelper.getMenuListener(); + } + return listener; } /* @@ -227,7 +229,8 @@ super.unconfigure(viewer); fViewerContributions.remove(viewer); if (fMenuHelper != null) { - // fMenuHelper.removeMenuListenersFor(viewer); + fMenuHelper.removeMenuListenersFor(viewer); + fMenuHelper = null; } } }
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContextMenuHelper.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContextMenuHelper.java index 76bff7c..5dfc6ba 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContextMenuHelper.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDContextMenuHelper.java
@@ -13,70 +13,115 @@ package org.eclipse.wst.dtd.ui.views.contentoutline; -/** - * Menu helper for Content Outline page. This should not be used elsewhere. - */ -class DTDContextMenuHelper // extends FocusAdapter -{ -/* +import java.util.ArrayList; +import java.util.List; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.wst.dtd.core.internal.AttributeList; +import org.eclipse.wst.dtd.core.internal.CMGroupNode; +import org.eclipse.wst.dtd.core.internal.CMNode; +import org.eclipse.wst.dtd.core.internal.DTDFile; +import org.eclipse.wst.dtd.core.internal.DTDNode; +import org.eclipse.wst.dtd.core.internal.Element; +import org.eclipse.wst.dtd.core.internal.NodeList; +import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; +import org.eclipse.wst.dtd.core.internal.parser.DTDRegionTypes; +import org.eclipse.wst.dtd.core.internal.util.LabelValuePair; +import org.eclipse.wst.dtd.ui.internal.DTDUIMessages; +import org.eclipse.wst.dtd.ui.internal.editor.DTDEditorPluginImageHelper; +import org.eclipse.wst.dtd.ui.internal.editor.DTDEditorPluginImages; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddAttributeAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddAttributeListAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddCommentAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddElementAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddElementToContentModelAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddEntityAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddGroupToContentModelAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddNotationAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.AddParameterEntityReferenceAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.DeleteAction; +import org.eclipse.wst.dtd.ui.internal.views.contentoutline.actions.ReplaceEmptyContentModelWithGroupAction; + +/** + * Menu helper for Content Outline page. This should not be used elsewhere. + */ +class DTDContextMenuHelper { class DTDMenuListener implements IMenuListener { public void menuAboutToShow(IMenuManager manager) { - updateActions(); - Object node = null; - IContentOutlinePage outline = (IContentOutlinePage) DTDContextMenuHelper.this.fEditor.getAdapter(IContentOutlinePage.class); - ISelection selection = outline.getSelection(); - if (selection instanceof IStructuredSelection) { - node = ((IStructuredSelection) selection).getFirstElement(); - } - if (node == null && selection instanceof ITextSelection) { - node = fEditor.getModel().getIndexedRegion(((ITextSelection) selection).getOffset()); - } - if (node != null) { - addActionItemsForSelection(node, manager); + // update the action selection now + addNotationAction.selectionChanged(fViewerSelection); + addEntityAction.selectionChanged(fViewerSelection); + addElementAction.selectionChanged(fViewerSelection); + addCommentAction.selectionChanged(fViewerSelection); + addParameterEntityReferenceAction.selectionChanged(fViewerSelection); + deleteAction.selectionChanged(fViewerSelection); + addAttributeAction.selectionChanged(fViewerSelection); + addAttributeListAction.selectionChanged(fViewerSelection); + addGroupToContentModelAction.selectionChanged(fViewerSelection); + addElementToContentModelAction.selectionChanged(fViewerSelection); + replaceEmptyContentModelWithGroupAction.selectionChanged(fViewerSelection); + + + if (!fViewerSelection.isEmpty()) { + addActionItemsForSelection(fViewerSelection.getFirstElement(), manager); } } } - private AddAttributeAction addAttributeAction; - private AddAttributeListAction addAttributeListAction; - private AddCommentAction addCommentAction; - private AddElementAction addElementAction; - private AddElementToContentModelAction addElementToContentModelAction; - private AddEntityAction addEntityAction; - private AddGroupToContentModelAction addGroupToContentModelAction; - private AddNotationAction addNotationAction; - private AddParameterEntityReferenceAction addParameterEntityReferenceAction; - private DeleteAction deleteAction; + class ViewerSelectionChangeListener implements ISelectionChangedListener { + public void selectionChanged(SelectionChangedEvent event) { + _selectionChanged(event); + } + } - // default access, for inner class - IEditorPart fEditor; + AddAttributeAction addAttributeAction; + + AddAttributeListAction addAttributeListAction; + AddCommentAction addCommentAction; + AddElementAction addElementAction; + AddElementToContentModelAction addElementToContentModelAction; + AddEntityAction addEntityAction; + AddGroupToContentModelAction addGroupToContentModelAction; + AddNotationAction addNotationAction; + AddParameterEntityReferenceAction addParameterEntityReferenceAction; + DeleteAction deleteAction; + private ISelectionChangedListener fInternalSelectionChangedListener = new ViewerSelectionChangeListener(); private IMenuListener fMenuListener; - private IAction redoAction; + private DTDModelImpl fModel; + private List fViewerList; - // protected CutAction cutAction; - // protected CopyAction copyAction; - // protected PasteAction pasteAction; - private IAction undoAction; + IStructuredSelection fViewerSelection = StructuredSelection.EMPTY; - // private List viewerList = new Vector(); + ReplaceEmptyContentModelWithGroupAction replaceEmptyContentModelWithGroupAction; - public DTDContextMenuHelper(IEditorPart editor) { - this.fEditor = editor; + public DTDContextMenuHelper(DTDModelImpl model) { + fModel = model; + fViewerList = new ArrayList(1); fMenuListener = new DTDMenuListener(); - addNotationAction = new AddNotationAction(editor, DTDUIMessages._UI_ACTION_ADD_DTD_NOTATION); //$NON-NLS-1$ - addEntityAction = new AddEntityAction(editor, DTDUIMessages._UI_ACTION_ADD_DTD_ENTITY); //$NON-NLS-1$ - addElementAction = new AddElementAction(editor, DTDUIMessages._UI_ACTION_ADD_DTD_ELEMENT); //$NON-NLS-1$ - addCommentAction = new AddCommentAction(editor, DTDUIMessages._UI_ACTION_ADD_DTD_COMMENT); //$NON-NLS-1$ - addParameterEntityReferenceAction = new AddParameterEntityReferenceAction(editor, DTDUIMessages._UI_ACTION_ADD_PARAM_ENTITY_REF); //$NON-NLS-1$ + addNotationAction = new AddNotationAction(model, DTDUIMessages._UI_ACTION_ADD_DTD_NOTATION); //$NON-NLS-1$ + addEntityAction = new AddEntityAction(model, DTDUIMessages._UI_ACTION_ADD_DTD_ENTITY); //$NON-NLS-1$ + addElementAction = new AddElementAction(model, DTDUIMessages._UI_ACTION_ADD_DTD_ELEMENT); //$NON-NLS-1$ + addCommentAction = new AddCommentAction(model, DTDUIMessages._UI_ACTION_ADD_DTD_COMMENT); //$NON-NLS-1$ + + addParameterEntityReferenceAction = new AddParameterEntityReferenceAction(model, DTDUIMessages._UI_ACTION_ADD_PARAM_ENTITY_REF); //$NON-NLS-1$ deleteAction = new DeleteAction(DTDUIMessages._UI_ACTION_DTD_DELETE); //$NON-NLS-1$ - addAttributeAction = new AddAttributeAction(editor, DTDUIMessages._UI_ACTION_ADD_ATTRIBUTE); //$NON-NLS-1$ - addAttributeListAction = new AddAttributeListAction(editor, DTDUIMessages._UI_ACTION_ADD_ATTRIBUTELIST); //$NON-NLS-1$ + addAttributeAction = new AddAttributeAction(model, DTDUIMessages._UI_ACTION_ADD_ATTRIBUTE); //$NON-NLS-1$ + addAttributeListAction = new AddAttributeListAction(model, DTDUIMessages._UI_ACTION_ADD_ATTRIBUTELIST); //$NON-NLS-1$ - addGroupToContentModelAction = new AddGroupToContentModelAction(editor, DTDUIMessages._UI_ACTION_GROUP_ADD_GROUP); //$NON-NLS-1$ - addElementToContentModelAction = new AddElementToContentModelAction(editor, DTDUIMessages._UI_ACTION_ADD_ELEMENT); //$NON-NLS-1$ + addGroupToContentModelAction = new AddGroupToContentModelAction(model, DTDUIMessages._UI_ACTION_GROUP_ADD_GROUP); //$NON-NLS-1$ + addElementToContentModelAction = new AddElementToContentModelAction(model, DTDUIMessages._UI_ACTION_ADD_ELEMENT); //$NON-NLS-1$ + + replaceEmptyContentModelWithGroupAction = new ReplaceEmptyContentModelWithGroupAction(model, DTDUIMessages._UI_ACTION_GROUP_ADD_GROUP); //$NON-NLS-1$ addNotationAction.setImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_OBJ_ADD_NOTATION)); addEntityAction.setImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_OBJ_ADD_ENTITY)); @@ -103,18 +148,28 @@ addElementToContentModelAction.setImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_ETOOL_ADD_ELEMENTTOCONMODEL)); addElementToContentModelAction.setHoverImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_CTOOL_ADD_ELEMENTTOCONMODEL)); addElementToContentModelAction.setDisabledImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_DTOOL_ADD_ELEMENTTOCONMODEL)); + + // use the same images as addGroupToContentModelAction + replaceEmptyContentModelWithGroupAction.setImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_ETOOL_ADD_GROUPTOCONMODEL)); + replaceEmptyContentModelWithGroupAction.setHoverImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_CTOOL_ADD_GROUPTOCONMODEL)); + replaceEmptyContentModelWithGroupAction.setDisabledImageDescriptor(DTDEditorPluginImageHelper.getInstance().getImageDescriptor(DTDEditorPluginImages.IMG_DTOOL_ADD_GROUPTOCONMODEL)); } - public void addActionItemsForSelection(Object selectedObject, IMenuManager menu) { - if (undoAction == null) { - undoAction = fEditor.getAction(ActionFactory.UNDO.getId()); - redoAction = fEditor.getAction(ActionFactory.REDO.getId()); + void _selectionChanged(SelectionChangedEvent event) { + /* + * Save the selection so we only notify the actions when the menu is + * shown + */ + ISelection selection = event.getSelection(); + if (selection instanceof IStructuredSelection) { + fViewerSelection = (IStructuredSelection) selection; } + else { + fViewerSelection = StructuredSelection.EMPTY; + } + } - menu.add(undoAction); - menu.add(redoAction); - menu.add(new Separator()); - + void addActionItemsForSelection(Object selectedObject, IMenuManager menu) { if (selectedObject instanceof NodeList) { // add appropriate menu to logical view NodeList folder = (NodeList) selectedObject; @@ -125,7 +180,7 @@ menu.add(addEntityAction); } else if (folder.getListType().equals(DTDRegionTypes.ELEMENT_TAG)) { - LabelValuePair[] availableEntities = ((DTDModelImpl) fEditor.getModel()).createParmEntityContentItems(null); + LabelValuePair[] availableEntities = fModel.createParmEntityContentItems(null); addParameterEntityReferenceAction.setEnabled(availableEntities.length > 0); menu.add(addElementAction); @@ -136,7 +191,7 @@ } } if (selectedObject instanceof DTDFile || selectedObject == null) { - LabelValuePair[] availableEntities = ((DTDModelImpl) fEditor.getModel()).createParmEntityContentItems(null); + LabelValuePair[] availableEntities = fModel.createParmEntityContentItems(null); addParameterEntityReferenceAction.setEnabled(availableEntities.length > 0); menu.add(addElementAction); @@ -151,10 +206,14 @@ if (selectedObject instanceof Element) { Element dtdElement = (Element) selectedObject; - if (dtdElement.getContentModel() == null) { + CMNode contentModel = dtdElement.getContentModel(); + if (contentModel == null) { menu.add(addGroupToContentModelAction); menu.add(addElementToContentModelAction); } + else if (contentModel != null && CMNode.EMPTY.equals(contentModel.getType())) { + menu.add(replaceEmptyContentModelWithGroupAction); + } // if (!(((Element)selectedObject).getContentModel() instanceof // CMGroupNode)) // { @@ -192,7 +251,7 @@ } } - public void addEditActions(IMenuManager menu) { + void addEditActions(IMenuManager menu) { // menu.add(undoAction); // menu.add(redoAction); // menu.add(new Separator()); @@ -202,82 +261,24 @@ } public void createMenuListenersFor(Viewer viewer) { - viewer.addSelectionChangedListener(addNotationAction); - viewer.addSelectionChangedListener(addEntityAction); - viewer.addSelectionChangedListener(addElementAction); - viewer.addSelectionChangedListener(addCommentAction); - viewer.addSelectionChangedListener(addParameterEntityReferenceAction); - viewer.addSelectionChangedListener(deleteAction); - viewer.addSelectionChangedListener(addAttributeAction); - viewer.addSelectionChangedListener(addAttributeListAction); - viewer.addSelectionChangedListener(addGroupToContentModelAction); - viewer.addSelectionChangedListener(addElementToContentModelAction); + viewer.addSelectionChangedListener(fInternalSelectionChangedListener); + ISelection selection = viewer.getSelection(); + if (selection instanceof IStructuredSelection) { + fViewerSelection = (IStructuredSelection) selection; + } + else { + fViewerSelection = StructuredSelection.EMPTY; + } - IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); - addNotationAction.selectionChanged(selection); - addEntityAction.selectionChanged(selection); - addElementAction.selectionChanged(selection); - addParameterEntityReferenceAction.selectionChanged(selection); - deleteAction.selectionChanged(selection); - addAttributeAction.selectionChanged(selection); - addAttributeListAction.selectionChanged(selection); - addGroupToContentModelAction.selectionChanged(selection); - addElementToContentModelAction.selectionChanged(selection); - - // viewer.addSelectionChangedListener(cutAction); - // viewer.addSelectionChangedListener(copyAction); - // viewer.addSelectionChangedListener(pasteAction); - - // viewerList.add(viewer); - // viewer.getControl().addFocusListener(this); - } - - public DeleteAction getDeleteAction() { - return deleteAction; + fViewerList.add(viewer); } public IMenuListener getMenuListener() { return fMenuListener; } - // public void focusGained(FocusEvent event) - // { - // updateSelection(); - // } - public void removeMenuListenersFor(Viewer viewer) { - viewer.removeSelectionChangedListener(addNotationAction); - viewer.removeSelectionChangedListener(addEntityAction); - viewer.removeSelectionChangedListener(addElementAction); - viewer.removeSelectionChangedListener(addCommentAction); - viewer.removeSelectionChangedListener(addParameterEntityReferenceAction); - viewer.removeSelectionChangedListener(deleteAction); - viewer.removeSelectionChangedListener(addAttributeAction); - viewer.removeSelectionChangedListener(addAttributeListAction); - viewer.removeSelectionChangedListener(addGroupToContentModelAction); - viewer.removeSelectionChangedListener(addElementToContentModelAction); + viewer.removeSelectionChangedListener(fInternalSelectionChangedListener); + fViewerList.remove(viewer); } - - // Update all the actions for the viewer in focus - public void updateActions() { - // undoAction.update(); - // redoAction.update(); - } - - public void updateEditActions(IActionBars actionBars) { - // if (actionBars != null) - // { - // actionBars.setGlobalActionHandler(IWorkbenchActionConstants.CUT, - // cutAction); - // actionBars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, - // copyAction); - // actionBars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, - // pasteAction); - // actionBars.setGlobalActionHandler(IWorkbenchActionConstants.UNDO, - // undoAction); - // actionBars.setGlobalActionHandler(IWorkbenchActionConstants.REDO, - // redoAction); - // } - } -*/ }
diff --git a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDTreeContentProvider.java b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDTreeContentProvider.java index f4c163d..5c605d4 100644 --- a/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDTreeContentProvider.java +++ b/bundles/org.eclipse.wst.dtd.ui/src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDTreeContentProvider.java
@@ -37,7 +37,6 @@ import org.eclipse.wst.dtd.core.internal.document.DTDModelImpl; import org.eclipse.wst.dtd.core.internal.event.IDTDFileListener; import org.eclipse.wst.dtd.core.internal.event.NodesEvent; -import org.eclipse.wst.dtd.core.internal.parser.DTDRegionTypes; class DTDTreeContentProvider implements ITreeContentProvider, IDTDFileListener { @@ -235,7 +234,12 @@ } private boolean isVisibleNodeList(NodeList nodeList) { - return !nodeList.getListType().equals(DTDRegionTypes.ATTLIST_TAG); + /* + * All NodesLists should be visible because you can momentarily have + * an ATTLIST (for example) without a corresponding ELEMENT + * declaration + */ + return true;// !nodeList.getListType().equals(DTDRegionTypes.ATTLIST_TAG); } public void nodeChanged(DTDNode node) {