[148064] Direct editing an element's type in the graph viewer modifies schema even if same type is picked
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/ADTMultiPageEditor.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/ADTMultiPageEditor.java
index 6d4c299..c5a7cce 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/ADTMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/ADTMultiPageEditor.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.wst.xsd.ui.internal.adt.editor;
-import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
@@ -25,24 +24,14 @@
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.forms.widgets.ImageHyperlink;
-import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
-import org.eclipse.ui.internal.WorkbenchImages;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import org.eclipse.wst.xsd.ui.internal.adt.actions.BaseSelectionAction;
import org.eclipse.wst.xsd.ui.internal.adt.actions.SetInputToGraphView;
import org.eclipse.wst.xsd.ui.internal.adt.design.DesignViewGraphicalViewer;
-import org.eclipse.wst.xsd.ui.internal.adt.design.FlatCCombo;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.ADTEditPartFactory;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.BackToSchemaEditPart;
import org.eclipse.wst.xsd.ui.internal.adt.facade.IModel;
@@ -114,82 +103,8 @@
backToSchemaEditPart = new BackToSchemaEditPart(this);
backToSchemaEditPart.setModel(getModel());
toolbarViewer.setContents(backToSchemaEditPart);
-
- EditorModeManager manager = (EditorModeManager)getAdapter(EditorModeManager.class);
- EditorMode [] modeList = manager.getModes();
- int modeListLength = modeList.length;
- boolean showToolBar = modeListLength > 1;
-
- if (showToolBar)
- {
- toolbar = new Composite(parent, SWT.FLAT | SWT.DRAW_TRANSPARENT);
- toolbar.setBackground(ColorConstants.white);
- toolbar.addPaintListener(new PaintListener() {
-
- public void paintControl(PaintEvent e)
- {
- Rectangle clientArea = toolbar.getClientArea();
- e.gc.setForeground(ColorConstants.lightGray);
- e.gc.drawRectangle(clientArea.x, clientArea.y, clientArea.width - 1, clientArea.height - 1);
- }
- });
-
- GridLayout gridLayout = new GridLayout(3, false);
- toolbar.setLayout(gridLayout);
-
- Label label = new Label(toolbar, SWT.FLAT | SWT.HORIZONTAL);
- label.setBackground(ColorConstants.white);
- label.setText(Messages._UI_LABEL_VIEW);
- label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
-
- modeCombo = new FlatCCombo(toolbar, SWT.FLAT);
- modeCombo.setText(modeList[0].getDisplayName());
- // populate combo with modes
- for (int i = 0; i < modeListLength; i++ )
- {
- String modeName = modeList[i].getDisplayName();
- modeCombo.add(modeName);
-
- int approxWidthOfLetter = parent.getFont().getFontData()[0].getHeight();
- int approxWidthOfStrings = approxWidthOfLetter * modeName.length() + approxWidthOfLetter * Messages._UI_LABEL_VIEW.length();
- if (approxWidthOfStrings > maxLength)
- maxLength = approxWidthOfStrings;
- }
-
- modeComboListener = new ModeComboListener();
- modeCombo.addSelectionListener(modeComboListener);
- modeCombo.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_END));
-
- Control [] children = modeCombo.getChildren();
- int length = children.length;
- for (int i = 0; i < length; i++)
- {
- if (children[i] instanceof Button)
- {
- Button arrow = (Button)children[i];
- final Rectangle bounds = arrow.getBounds();
- arrow.setBackground(toolbar.getBackground());
- arrow.addPaintListener(new PaintListener()
- {
- public void paintControl(PaintEvent e)
- {
- Image image = XSDEditorPlugin.getXSDImage("icons/TriangleToolBar.gif"); //$NON-NLS-1$
- Rectangle b = image.getBounds();
- e.gc.fillRectangle(b.x, b.y, b.width + 1, b.height + 1);
- e.gc.drawImage(image, bounds.x, bounds.y - 1);
- }
- });
- break;
- }
- }
-
- ImageHyperlink hyperlink = new ImageHyperlink(toolbar, SWT.FLAT);
- hyperlink.setBackground(ColorConstants.white);
- hyperlink.setImage(WorkbenchImages.getImageRegistry().get(IWorkbenchGraphicConstants.IMG_ETOOL_HELP_CONTENTS));
- hyperlink.setToolTipText(Messages._UI_HOVER_VIEW_MODE_DESCRIPTION);
- hyperlink.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
- }
+ createViewModeToolbar(parent);
return parent;
}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/CommonMultiPageEditor.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/CommonMultiPageEditor.java
index 2b1a07d..17a0e6c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/CommonMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/editor/CommonMultiPageEditor.java
@@ -26,11 +26,20 @@
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
@@ -41,7 +50,10 @@
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
+import org.eclipse.ui.internal.WorkbenchImages;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
@@ -49,6 +61,7 @@
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.xsd.ui.internal.adt.design.FlatCCombo;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.RootEditPart;
+import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
public abstract class CommonMultiPageEditor extends MultiPageEditorPart implements IResourceChangeListener, CommandStackListener, ITabbedPropertySheetPageContributor, IPropertyListener, IEditorModeListener
{
@@ -502,6 +515,87 @@
protected abstract EditorModeManager createEditorModeManager();
+
+ protected void createViewModeToolbar(Composite parent)
+ {
+ EditorModeManager manager = (EditorModeManager)getAdapter(EditorModeManager.class);
+ EditorMode [] modeList = manager.getModes();
+
+ int modeListLength = modeList.length;
+ boolean showToolBar = modeListLength > 1;
+
+ if (showToolBar)
+ {
+ toolbar = new Composite(parent, SWT.FLAT | SWT.DRAW_TRANSPARENT);
+ toolbar.setBackground(ColorConstants.white);
+ toolbar.addPaintListener(new PaintListener() {
+
+ public void paintControl(PaintEvent e)
+ {
+ Rectangle clientArea = toolbar.getClientArea();
+ e.gc.setForeground(ColorConstants.lightGray);
+ e.gc.drawRectangle(clientArea.x, clientArea.y, clientArea.width - 1, clientArea.height - 1);
+ }
+ });
+
+ GridLayout gridLayout = new GridLayout(3, false);
+ toolbar.setLayout(gridLayout);
+
+ Label label = new Label(toolbar, SWT.FLAT | SWT.HORIZONTAL);
+ label.setBackground(ColorConstants.white);
+ label.setText(Messages._UI_LABEL_VIEW);
+ label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
+
+ modeCombo = new FlatCCombo(toolbar, SWT.FLAT);
+ modeCombo.setText(modeList[0].getDisplayName());
+ // populate combo with modes
+ for (int i = 0; i < modeListLength; i++ )
+ {
+ String modeName = modeList[i].getDisplayName();
+ modeCombo.add(modeName);
+
+ int approxWidthOfLetter = parent.getFont().getFontData()[0].getHeight();
+ int approxWidthOfStrings = approxWidthOfLetter * modeName.length() + approxWidthOfLetter * Messages._UI_LABEL_VIEW.length();
+ if (approxWidthOfStrings > maxLength)
+ maxLength = approxWidthOfStrings;
+ }
+
+ modeComboListener = new ModeComboListener();
+ modeCombo.addSelectionListener(modeComboListener);
+ modeCombo.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_END));
+
+ Control [] children = modeCombo.getChildren();
+ int length = children.length;
+ for (int i = 0; i < length; i++)
+ {
+ if (children[i] instanceof Button)
+ {
+ Button arrow = (Button)children[i];
+ final Rectangle bounds = arrow.getBounds();
+ arrow.setBackground(toolbar.getBackground());
+ arrow.addPaintListener(new PaintListener()
+ {
+ public void paintControl(PaintEvent e)
+ {
+ Image image = XSDEditorPlugin.getXSDImage("icons/TriangleToolBar.gif"); //$NON-NLS-1$
+ Rectangle b = image.getBounds();
+ e.gc.fillRectangle(b.x, b.y, b.width + 1, b.height + 1);
+ e.gc.drawImage(image, bounds.x, bounds.y - 1);
+ }
+ });
+ break;
+ }
+ }
+
+ ImageHyperlink hyperlink = new ImageHyperlink(toolbar, SWT.FLAT);
+ hyperlink.setBackground(ColorConstants.white);
+ hyperlink.setImage(WorkbenchImages.getImageRegistry().get(IWorkbenchGraphicConstants.IMG_ETOOL_HELP_CONTENTS));
+ hyperlink.setToolTipText(Messages._UI_HOVER_VIEW_MODE_DESCRIPTION);
+ hyperlink.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
+ }
+ }
+
+
protected class ModeComboListener implements SelectionListener
{
public ModeComboListener()