[218281] [hotbug] XSD editor should not redraw tree if visual editor is not active
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/editparts/BaseEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/editparts/BaseEditPart.java
index e6b34b4..29c580e 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/editparts/BaseEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/editparts/BaseEditPart.java
@@ -17,6 +17,7 @@
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
+import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.gef.editparts.ZoomListener;
@@ -35,6 +36,7 @@
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.model.IFeedbackHandler;
import org.eclipse.wst.xsd.ui.internal.adt.design.editpolicies.KeyBoardAccessibilityEditPolicy;
import org.eclipse.wst.xsd.ui.internal.adt.design.figures.IFigureFactory;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.CommonMultiPageEditor;
import org.eclipse.wst.xsd.ui.internal.adt.facade.IADTObject;
import org.eclipse.wst.xsd.ui.internal.adt.facade.IADTObjectListener;
@@ -111,20 +113,23 @@
}
public void refresh() {
- super.refresh();
-
- for(Iterator i = getChildren().iterator(); i.hasNext(); )
+
+ boolean doUpdateDesign = doUpdateDesign();
+ if (doUpdateDesign)
{
- Object obj = i.next();
- if (obj instanceof BaseEditPart)
+ super.refresh();
+ for (Iterator i = getChildren().iterator(); i.hasNext();)
{
- ((BaseEditPart)obj).refresh();
+ Object obj = i.next();
+ if (obj instanceof BaseEditPart)
+ {
+ ((BaseEditPart) obj).refresh();
+ }
+ else if (obj instanceof AbstractGraphicalEditPart)
+ {
+ ((AbstractGraphicalEditPart) obj).refresh();
+ }
}
- else if (obj instanceof AbstractGraphicalEditPart)
- {
- ((AbstractGraphicalEditPart)obj).refresh();
- }
-
}
}
@@ -230,4 +235,37 @@
}
return false;
}
+
+ // For https://bugs.eclipse.org/bugs/show_bug.cgi?id=218281
+ // Don't want to refresh the design when changes are made in the source view.
+ protected boolean doUpdateDesign()
+ {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null)
+ {
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ if (workbenchWindow != null)
+ {
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ if (page != null)
+ {
+ IEditorPart editorPart = page.getActiveEditor();
+ if (editorPart instanceof CommonMultiPageEditor)
+ {
+ CommonMultiPageEditor editor = (CommonMultiPageEditor) editorPart;
+ GraphicalViewer viewer = (GraphicalViewer)editor.getAdapter(GraphicalViewer.class);
+ // Need to ensure this is the same editor we are working with since the active editor may not be
+ // the current, eg. at startup, there can be another XSD Editor open on the source page, so we could end
+ // up not populating the design view initally
+ if (getViewer() == viewer)
+ {
+ // If source page is active, don't update the design
+ return !editor.isSourcePageActive();
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
}
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 7942ed1..2473545 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation 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
@@ -22,10 +22,12 @@
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
+import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.graphics.Rectangle;
@@ -209,6 +211,32 @@
{
currentPage = newPageIndex;
super.pageChange(newPageIndex);
+
+ if (newPageIndex == DESIGN_PAGE_INDEX)
+ {
+ ISelection selection = graphicalViewer.getSelectionManager().getSelection();
+ Object model = null;
+ if (selection instanceof StructuredSelection)
+ {
+ StructuredSelection structuredSelection = (StructuredSelection)selection;
+ // While in the source view, selection could have changed.
+ // Will try to select the first item when switching back to the design view.
+ // We currently do not multi-select figures if multiple elements are selected in the source view.
+ // For example, if multiple global elements are selected, the graph view will be in the details view
+ // of the first one.
+ Object elem = structuredSelection.getFirstElement();
+ if (elem instanceof EditPart)
+ model = ((EditPart)elem).getModel();
+ }
+ // Refresh the design page upon page change
+ graphicalViewer.getContents().refresh();
+ // Need to use the adapter, since after refresh, the old edit part will have been replaced
+ // Maintain previous selection:
+ if (model != null)
+ {
+ getSelectionManager().setSelection(new StructuredSelection(model));
+ }
+ }
setFocus();
}
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 7499b3d..bbcdbbb 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
@@ -923,5 +923,9 @@
// do nothing
}
}
-
+
+ public boolean isSourcePageActive()
+ {
+ return getActivePage() == SOURCE_PAGE_INDEX;
+ }
}