浏览代码

Replaced Breadcrumbviewer with status message

Andreas Muelder 9 年之前
父节点
当前提交
6d2aa90254

+ 38 - 3
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editor/StatechartDiagramEditor.java

@@ -16,6 +16,7 @@ import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
@@ -34,11 +35,16 @@ import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
 import org.eclipse.gmf.runtime.diagram.ui.internal.parts.DiagramGraphicalViewerKeyHandler;
 import org.eclipse.gmf.runtime.gef.ui.internal.editparts.AnimatableZoomManager;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
@@ -71,6 +77,7 @@ import com.google.inject.Key;
 @SuppressWarnings("restriction")
 public class StatechartDiagramEditor extends DiagramPartitioningEditor implements IGotoMarker {
 
+	private static final Font INVALID_DOMAIN_FONT = new Font(null, new FontData("Verdana", 10, SWT.NORMAL));
 	public static final String ID = "org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor";
 	private static final int DELAY = 200; // ms
 
@@ -117,15 +124,43 @@ public class StatechartDiagramEditor extends DiagramPartitioningEditor implement
 	}
 
 	public boolean isEditable() {
+		DomainStatus domainStatus = getDomainStatus();
+		if (domainStatus.getSeverity() == Severity.ERROR) {
+			return false;
+		}
+		return super.isEditable();
+	}
+
+	protected DomainStatus getDomainStatus() {
 		EObject element = getDiagram().getElement();
 		if (element instanceof DomainElement) {
 			DomainStatus domainStatus = DomainRegistry.getDomainStatus(((DomainElement) element).getDomainID());
-			if (domainStatus.getSeverity() != Severity.OK)
-				return false;
+			return domainStatus;
 		}
-		return super.isEditable();
+		return null;
 	};
 
+	@Override
+	protected void createBreadcrumbViewer(Composite parent) {
+		DomainStatus domainStatus = getDomainStatus();
+		if (domainStatus.getSeverity() == Severity.ERROR) {
+			createStatusLabel(parent, domainStatus);
+			return;
+		}
+		super.createBreadcrumbViewer(parent);
+	}
+
+	private void createStatusLabel(Composite parent, DomainStatus domainStatus) {
+		CLabel label = new CLabel(parent, SWT.SHADOW_OUT);
+		label.setFont(INVALID_DOMAIN_FONT);
+		label.setBackground(ColorConstants.white);
+		label.setForeground(ColorConstants.red);
+		label.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
+		label.setText(domainStatus.getMessage());
+		GridDataFactory.fillDefaults().grab(true, false).applyTo(label);
+		parent.pack(true);
+	}
+
 	@Override
 	public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
 		if (IContentOutlinePage.class.equals(type)) {

+ 0 - 45
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StatechartDiagramEditPart.java

@@ -10,27 +10,14 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
 import org.eclipse.gef.EditPolicy;
-import org.eclipse.gef.RootEditPart;
 import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IDiagramPreferenceSupport;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy;
-import org.eclipse.gmf.runtime.diagram.ui.render.editparts.RenderedDiagramRootEditPart;
 import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.xtext.EcoreUtil2;
-import org.yakindu.base.base.DomainElement;
-import org.yakindu.sct.domain.extension.DomainRegistry;
-import org.yakindu.sct.domain.extension.DomainStatus;
 import org.yakindu.sct.ui.editor.DiagramActivator;
 import org.yakindu.sct.ui.editor.policies.CompositeElementCanonicalEditPolicy;
 
@@ -41,44 +28,12 @@ import org.yakindu.sct.ui.editor.policies.CompositeElementCanonicalEditPolicy;
  */
 public class StatechartDiagramEditPart extends DiagramEditPart implements IDiagramPreferenceSupport {
 
-	private static final Font INVALID_DOMAIN_FONT = new Font(null, new FontData("Verdana", 10, SWT.NORMAL));
-
 	private PreferencesHint preferenceHint;
 
 	public StatechartDiagramEditPart(View diagramView) {
 		super(diagramView);
 	}
 
-	@Override
-	public void activate() {
-		super.activate();
-		validateDomain();
-	}
-
-	protected void validateDomain() {
-		final DomainElement domainElement = EcoreUtil2.getContainerOfType(resolveSemanticElement(),
-				DomainElement.class);
-		DomainStatus domainStatus = DomainRegistry.getDomainStatus(domainElement.getDomainID());
-		if (domainStatus.getSeverity() != DomainStatus.Severity.OK) {
-			disableEditor(domainStatus.getMessage());
-		}
-	}
-
-	private void disableEditor(String msg) {
-		RootEditPart rootEditPart = getRoot();
-		if (rootEditPart instanceof RenderedDiagramRootEditPart) {
-			IFigure layer = ((RenderedDiagramRootEditPart) rootEditPart)
-					.getLayer(SCTRenderedDiagramRootEditPart.WATERMARK_LAYER);
-			Label figure = new Label(msg);
-			figure.setIcon(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
-			figure.setForegroundColor(org.eclipse.draw2d.ColorConstants.red);
-			figure.setFont(INVALID_DOMAIN_FONT);
-			figure.setSize(figure.getPreferredSize());
-			layer.add(figure);
-		}
-		disableEditMode();
-	}
-
 	@Override
 	protected void createDefaultEditPolicies() {
 		installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new CompositeElementCanonicalEditPolicy());

+ 1 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/partitioning/DiagramPartitioningEditor.java

@@ -133,7 +133,7 @@ public abstract class DiagramPartitioningEditor extends DiagramDocumentEditor im
 		getSite().registerContextMenu(ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, provider, viewer);
 	}
 
-	private void createBreadcrumbViewer(Composite parent) {
+	protected void createBreadcrumbViewer(Composite parent) {
 		viewer = new DiagramPartitioningBreadcrumbViewer(parent, SWT.READ_ONLY);
 		viewer.addSelectionChangedListener(this);
 		viewer.setContentProvider(new BreadcrumbViewerContentProvider());