/** * Copyright (c) 2013-2016 Angelo ZERR. * 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.eclipse.ide.server.nodejs.internal.ui.preferences; import java.net.URL; import java.util.Collection; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.PlatformUI; import tern.eclipse.ide.server.nodejs.core.debugger.INodejsDebugger; import tern.eclipse.ide.server.nodejs.core.debugger.NodejsDebuggersManager; import tern.eclipse.ide.server.nodejs.internal.ui.TernNodejsUIMessages; import tern.eclipse.ide.server.nodejs.internal.ui.TernNodejsUIPlugin; import tern.eclipse.ide.ui.preferences.CheckComboFieldEditor; /** * Debugger field editor. * */ public class DebuggerFieldEditor extends CheckComboFieldEditor { private Link wikiLink; private boolean isValid = true; public DebuggerFieldEditor(String name, String labelText, Composite parent) { super(name, labelText, createDebuggers(), "", parent); } @Override protected void updateComboBoxEnablement(Composite parent, boolean enabled) { super.updateComboBoxEnablement(parent, enabled); if (wikiLink != null) { wikiLink.setEnabled(enabled); } } @Override protected void refreshValidState() { if (isCheckboxSelected()) { if (getSelection() == 0) { isValid = false; showErrorMessage(TernNodejsUIMessages.TernNodejsPreferencesPage_debugger_err_not_selected); return; } else if ("".equals(getValue())) { //$NON-NLS-1$ ) isValid = false; showErrorMessage(TernNodejsUIMessages.TernNodejsPreferencesPage_debugger_err_not_installed); return; } } isValid = true; clearErrorMessage(); } @Override public boolean isValid() { return isValid; } public static String[][] createDebuggers() { Collection<INodejsDebugger> list = NodejsDebuggersManager.getDebuggers(); String[][] debuggers = new String[list.size() + 1][2]; debuggers[0][0] = TernNodejsUIMessages.TernNodejsPreferencesPage_debugger_none; debuggers[0][1] = ""; //$NON-NLS-1$ int j = 0; for (INodejsDebugger debugger : list) { j++; if (debugger.isInstalled()) { debuggers[j][0] = debugger.getName(); debuggers[j][1] = debugger.getId(); } else { debuggers[j][0] = debugger.getName() + TernNodejsUIMessages.TernNodejsPreferencesPage_debugger_not_installed; debuggers[j][1] = ""; //$NON-NLS-1$ } } return debuggers; } public Link createWikiLink(Composite parent, int style) { return this.wikiLink = newWikiLink(parent, style); } public static Link newWikiLink(Composite parent, int style) { Link wikiLink = new Link(parent, style); wikiLink.setText(TernNodejsUIMessages.TernNodejsPreferencesPage_debugger_wiki_link); wikiLink.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { try { PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL( new URL("https://github.com/angelozerr/tern.java/wiki/Debugging-Tern.js-on-Node.js")); //$NON-NLS-1$ } catch (Exception e1) { TernNodejsUIPlugin.getDefault().getLog() .log(new Status(IStatus.ERROR, TernNodejsUIPlugin.PLUGIN_ID, e1.getMessage(), e1)); } } }); return wikiLink; } }