diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/ErrorSettingsPanel.java b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/ErrorSettingsPanel.java
new file mode 100644
index 00000000000..4b09e67c9eb
--- /dev/null
+++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/ErrorSettingsPanel.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Kichwa Coders Canada Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License 2.0 which accompanies this distribution, and is
+ * available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.dialogs;
+
+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.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
+
+/**
+ * An empty configuration panel implementation.
+ */
+public class ErrorSettingsPanel extends AbstractConfigurationPanel {
+
+ private String errorMessage;
+
+ /**
+ * Constructor.
+ *
+ * @param container The configuration panel container or null
.
+ */
+ public ErrorSettingsPanel(IConfigurationPanelContainer container, String errorMessage) {
+ super(container);
+ this.errorMessage = errorMessage;
+ }
+
+ @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));
+
+ panel.setBackground(parent.getBackground());
+
+ if (errorMessage != null) {
+ Label label = new Label(panel, SWT.NONE);
+ label.setText(errorMessage);
+ }
+
+ setControl(panel);
+ }
+
+ @Override
+ public boolean isValid() {
+ return false;
+ }
+}
diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java
index b4ef3437951..98ce9cc86c5 100644
--- a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java
+++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java
@@ -39,14 +39,18 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+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.activator.UIPlugin;
import org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl;
import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
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.interfaces.IExternalExecutablesProperties;
import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
import org.eclipse.tm.terminal.view.ui.nls.Messages;
@@ -57,6 +61,12 @@ import org.eclipse.ui.PlatformUI;
* Launch terminal settings dialog implementation.
*/
public class LaunchTerminalSettingsDialog extends TrayDialog {
+ /**
+ * Special label for terminal (not shown to user) when there are no terminal
+ * connectors installed.
+ */
+ private static final String NO_CONNECTORS_LABEL = "none"; //$NON-NLS-1$
+
private String contextHelpId = null;
// The parent selection
@@ -496,6 +506,37 @@ public class LaunchTerminalSettingsDialog extends TrayDialog {
}
+ if (items.isEmpty()) {
+ // No connectors at all installed - display warning to user.
+ ILauncherDelegate noDelegate = new AbstractLauncherDelegate() {
+
+ @Override
+ public boolean needsUserConfiguration() {
+ return false;
+ }
+
+ @Override
+ public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+ return new ErrorSettingsPanel(container,
+ Messages.LaunchTerminalSettingsDialog_error_no_terminal_connectors);
+ }
+
+ @Override
+ public void execute(Map properties, Done done) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ITerminalConnector createTerminalConnector(Map properties) {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+
+ label2delegate.put(NO_CONNECTORS_LABEL, noDelegate);
+ items.add(NO_CONNECTORS_LABEL);
+ }
+
return items;
}
diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java
index f0f7dc2638e..84bbfc1e720 100644
--- a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java
+++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java
@@ -106,6 +106,7 @@ public class Messages extends NLS {
public static String LaunchTerminalSettingsDialog_error_title;
public static String LaunchTerminalSettingsDialog_error_invalidSettings;
+ public static String LaunchTerminalSettingsDialog_error_no_terminal_connectors;
public static String LaunchTerminalSettingsDialog_error_unknownReason;
public static String EncodingSelectionDialog_title;
diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties
index 1c3fa7bf79b..e0ecf2bf134 100644
--- a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties
+++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties
@@ -64,6 +64,7 @@ LaunchTerminalSettingsDialog_error_title=Terminal Settings
LaunchTerminalSettingsDialog_error_invalidSettings=The specified settings are invalid\n\n\
{0}\n\n\
Please review and specify valid settings. Or cancel the settings dialog to abort.
+LaunchTerminalSettingsDialog_error_no_terminal_connectors=There are no types of terminals installed. Please install a terminal connector
LaunchTerminalSettingsDialog_error_unknownReason=Cannot determine specifically which setting is invalid.
EncodingSelectionDialog_title=Encoding