Просмотр исходного кода

Submachine Selection Dialog triggers new Wizard instead of new Statechart wizard now

Andreas Mülder 14 лет назад
Родитель
Сommit
9416bbf370

+ 39 - 20
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/dialogs/SelectSubmachineDialog.java

@@ -14,13 +14,14 @@ import java.io.IOException;
 import java.util.Collections;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.emf.common.ui.dialogs.WorkspaceResourceDialog;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.Resource.Factory;
 import org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
@@ -35,13 +36,13 @@ import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.dialogs.NewWizard;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.model.WorkbenchContentProvider;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.wizards.IWizardDescriptor;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.ui.editor.StatechartImages;
-import org.yakindu.sct.ui.editor.wizards.CreationWizard;
 
 /**
  * Basic resource selection dialog for Statecharts with a link that opens the
@@ -50,11 +51,15 @@ import org.yakindu.sct.ui.editor.wizards.CreationWizard;
  * @author andreas muelder - Initial contribution and API
  * 
  */
+@SuppressWarnings("restriction")
 public class SelectSubmachineDialog extends WorkspaceResourceDialog {
 
-	public SelectSubmachineDialog(Shell parent) {
+	private final ViewerFilter filter;
+
+	public SelectSubmachineDialog(Shell parent, ViewerFilter filter) {
 		super(parent, new WorkbenchLabelProvider(),
 				new WorkbenchContentProvider());
+		this.filter = filter;
 		initDialog();
 	}
 
@@ -63,7 +68,7 @@ public class SelectSubmachineDialog extends WorkspaceResourceDialog {
 		setTitle("Select Submachine");
 		setMessage("Select the Submachine to include include into the Submachine State.");
 		setImage(StatechartImages.LOGO.image());
-		addFilter(new StatechartViewerFilter());
+		addFilter(filter);
 		loadContents();
 	}
 
@@ -117,29 +122,43 @@ public class SelectSubmachineDialog extends WorkspaceResourceDialog {
 		}
 
 		public void handleEvent(Event event) {
-			IWizardDescriptor descriptor = PlatformUI.getWorkbench()
-					.getNewWizardRegistry().findWizard(CreationWizard.ID);
-			try {
-				CreationWizard wizard = (CreationWizard) descriptor
-						.createWizard();
-				wizard.setOpenOnCreate(false);
-				wizard.init(PlatformUI.getWorkbench(), selection);
-				WizardDialog wd = new WizardDialog(Display.getDefault()
-						.getActiveShell(), wizard);
-				wd.setTitle(wizard.getWindowTitle());
-				wd.open();
-			} catch (CoreException e) {
-				e.printStackTrace();
+			NewWizard wizard = new NewWizard();
+			wizard.init(PlatformUI.getWorkbench(), selection);
+			WizardDialog wd = new WizardDialog(Display.getDefault()
+					.getActiveShell(), wizard);
+			wd.setTitle(wizard.getWindowTitle());
+			IDialogSettings workbenchSettings = IDEWorkbenchPlugin.getDefault()
+					.getDialogSettings();
+			IDialogSettings wizardSettings = workbenchSettings
+					.getSection("NewWizardAction"); //$NON-NLS-1$
+			if (wizardSettings == null) {
+				wizardSettings = workbenchSettings
+						.addNewSection("NewWizardAction"); //$NON-NLS-1$
 			}
+			wizard.setDialogSettings(wizardSettings);
+			wizard.setForcePreviousAndNextButtons(true);
+			wd.open();
 		}
 	}
 
-	protected static class StatechartViewerFilter extends ViewerFilter {
+	public static class StatechartViewerFilter extends ViewerFilter {
+
+		private final String fileExtension;
+
+		public StatechartViewerFilter(String fileExtension) {
+			this.fileExtension = fileExtension;
+		}
+
+		public StatechartViewerFilter(EObject eobject) {
+			this.fileExtension = eobject.eResource().getURI().fileExtension();
+		}
+
 		@Override
 		public boolean select(Viewer viewer, Object parentElement,
 				Object element) {
 			if (element instanceof IFile) {
-				return ((IFile) element).getFileExtension().endsWith("sct");
+				return ((IFile) element).getFileExtension().endsWith(
+						fileExtension);
 			}
 			return true;
 		}

+ 35 - 31
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/edithelper/StateEditHelper.java

@@ -22,6 +22,7 @@ import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.ui.editor.dialogs.SelectSubmachineDialog;
+import org.yakindu.sct.ui.editor.dialogs.SelectSubmachineDialog.StatechartViewerFilter;
 import org.yakindu.sct.ui.editor.editor.StatechartElementTypes;
 
 /**
@@ -36,46 +37,49 @@ public class StateEditHelper extends VertexEditHelper {
 	 */
 	@Override
 	protected ICommand getConfigureCommand(ConfigureRequest req) {
-		SGraphFactory factory = SGraphFactory.eINSTANCE;
 
-		// Composite State gets one region
 		if (StatechartElementTypes.COMPOSITE_STATE.equals(req
 				.getTypeToConfigure())) {
-			Region region = factory.createRegion();
-			region.setName("r1");
-			return new SetValueCommand(new SetRequest(
-					req.getElementToConfigure(),
-					SGraphPackage.Literals.STATE__SUB_REGIONS, region));
-
-			// Orthogonal State gets two regions
+			return createCompositeStateCommand(req);
 		} else if (StatechartElementTypes.ORTHOGONAL_STATE.equals(req
 				.getTypeToConfigure())) {
-			Region region = factory.createRegion();
-			region.setName("r1");
-			Region region2 = factory.createRegion();
-			region2.setName("r2");
-			return new SetValueCommand(new SetRequest(
-					req.getElementToConfigure(),
-					SGraphPackage.Literals.STATE__SUB_REGIONS,
-					com.google.common.collect.Lists.newArrayList(region,
-							region2)));
-
-			// Prompts the user to select a submachine resource
+			return createOrthogonalState(req);
 		} else if (StatechartElementTypes.SUBMACHINE_STATE.equals(req
 				.getTypeToConfigure())) {
-			SelectSubmachineDialog dialog = new SelectSubmachineDialog(
-					new Shell());
-			if (Dialog.OK == dialog.open()) {
-				Statechart selectedSubmachine = dialog.getSelectedSubmachine();
-				if (selectedSubmachine != null) {
-					return new SetValueCommand(
-							new SetRequest(
-									req.getElementToConfigure(),
-									SGraphPackage.Literals.STATE__SUBSTATECHART,
-									selectedSubmachine));
-				}
+			return createSubmachineStateCommand(req);
+		}
+		return null;
+	}
+
+	private ICommand createSubmachineStateCommand(ConfigureRequest req) {
+		SelectSubmachineDialog dialog = new SelectSubmachineDialog(new Shell(),
+				new StatechartViewerFilter(req.getElementToConfigure()));
+		if (Dialog.OK == dialog.open()) {
+			Statechart selectedSubmachine = dialog.getSelectedSubmachine();
+			if (selectedSubmachine != null) {
+				return new SetValueCommand(new SetRequest(
+						req.getElementToConfigure(),
+						SGraphPackage.Literals.STATE__SUBSTATECHART,
+						selectedSubmachine));
 			}
 		}
 		return null;
 	}
+
+	private ICommand createOrthogonalState(ConfigureRequest req) {
+		Region region = SGraphFactory.eINSTANCE.createRegion();
+		region.setName("r1");
+		Region region2 = SGraphFactory.eINSTANCE.createRegion();
+		region2.setName("r2");
+		return new SetValueCommand(new SetRequest(req.getElementToConfigure(),
+				SGraphPackage.Literals.STATE__SUB_REGIONS,
+				com.google.common.collect.Lists.newArrayList(region, region2)));
+	}
+
+	private ICommand createCompositeStateCommand(ConfigureRequest req) {
+		Region region = SGraphFactory.eINSTANCE.createRegion();
+		region.setName("r1");
+		return new SetValueCommand(new SetRequest(req.getElementToConfigure(),
+				SGraphPackage.Literals.STATE__SUB_REGIONS, region));
+	}
 }

+ 11 - 9
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/SubmachineSelectionDialogPropertyDescriptor.java

@@ -34,6 +34,7 @@ import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.ui.editor.dialogs.SelectSubmachineDialog;
+import org.yakindu.sct.ui.editor.dialogs.SelectSubmachineDialog.StatechartViewerFilter;
 
 import de.itemis.gmf.runtime.commons.properties.descriptors.IFormPropertyDescriptor;
 
@@ -49,27 +50,27 @@ public class SubmachineSelectionDialogPropertyDescriptor implements
 		@Override
 		public void notifyChanged(Notification msg) {
 			if (msg.getFeature() == SGraphPackage.Literals.STATE__SUBSTATECHART) {
-				updateLabel(submachine);
+				updateLabel(state);
 			}
 		}
 	}
 
-	private State submachine;
+	private State state;
 	private Label label;
 	private UpdateLabelAdapter updateLabelAdapter;
 
 	public void updateModelBinding(EObject eObject) {
-		this.submachine = (State) eObject;
-		updateLabel(submachine);
+		this.state = (State) eObject;
+		updateLabel(state);
 		if (updateLabelAdapter == null) {
 			updateLabelAdapter = new UpdateLabelAdapter();
-			submachine.eAdapters().add(updateLabelAdapter);
+			state.eAdapters().add(updateLabelAdapter);
 		}
 
 	}
 
 	private void updateLabel(State state) {
-		Statechart substatechart = submachine.getSubstatechart();
+		Statechart substatechart = state.getSubstatechart();
 		if (substatechart != null) {
 			label.setText(substatechart.eResource().getURI().toString());
 		}
@@ -100,14 +101,15 @@ public class SubmachineSelectionDialogPropertyDescriptor implements
 		openDialog.addListener(SWT.Selection, new Listener() {
 			public void handleEvent(Event event) {
 				SelectSubmachineDialog dialog = new SelectSubmachineDialog(
-						parent.getShell());
+						parent.getShell(), new StatechartViewerFilter(
+								state));
 				if (Dialog.OK == dialog.open()) {
 					Statechart selectedSubmachine = dialog
 							.getSelectedSubmachine();
 					if (selectedSubmachine != null) {
 						SetValueCommand command = new SetValueCommand(
 								new SetRequest(
-										submachine,
+										state,
 										SGraphPackage.Literals.STATE__SUBSTATECHART,
 										selectedSubmachine));
 						try {
@@ -129,6 +131,6 @@ public class SubmachineSelectionDialogPropertyDescriptor implements
 	}
 
 	public void dispose() {
-		submachine.eAdapters().remove(updateLabelAdapter);
+		state.eAdapters().remove(updateLabelAdapter);
 	}
 }