package org.rascalmpl.eclipse.repl; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector; import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension; import org.eclipse.tm.terminal.view.core.TerminalServiceFactory; import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService; import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done; import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants; import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel; import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer; import org.eclipse.tm.terminal.view.ui.internal.SettingsStore; import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate; import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel; @SuppressWarnings("restriction") public class RascalLauncherDelegate extends AbstractLauncherDelegate { @Override public boolean needsUserConfiguration() { return false; } @Override public IConfigurationPanel getPanel(IConfigurationPanelContainer container) { return new AbstractExtendedConfigurationPanel(container){ @Override public void setupPanel(Composite parent) { Composite panel = new Composite(parent, SWT.NONE); panel.setLayout(new GridLayout()); panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); // Fill the rest of the panel with a label to be able to // set a height and width hint for the dialog Label label = new Label(panel, SWT.HORIZONTAL); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData.widthHint = 300; layoutData.heightHint = 80; label.setLayoutData(layoutData); setControl(panel); } @Override protected void saveSettingsForHost(boolean add) { } @Override protected void fillSettingsForHost(String host) { } @Override protected String getHostFromSettings() { return null; } }; } @Override public void execute(Map<String, Object> properties, Done done) { properties.put(ITerminalsConnectorConstants.PROP_TITLE, computeTitle(properties)); properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE); ITerminalService terminal = TerminalServiceFactory.getService(); // If not available, we cannot fulfill this request if (terminal != null) { terminal.openConsole(properties, done); } } private String computeTitle(Map<String, Object> properties) { return "Rascal [project: " + properties.get("project") + ", mode: " + properties.get("mode") + "]"; } @Override public ITerminalConnector createTerminalConnector(Map<String, Object> properties) { ITerminalConnector conn = TerminalConnectorExtension.makeTerminalConnector("rascal-eclipse.connector1"); ISettingsStore store = new SettingsStore(); String project = (String) properties.get("project"); String mode = (String) properties.get("mode"); String module = (String) properties.get("module"); store.put("project", project); store.put("mode", mode); store.put("module", module); // note that an ILaunch reference is kept by the RascalTerminalRegistry conn.load(store); return conn; } }