package io.sloeber.ui.preferences; import org.eclipse.cdt.core.parser.util.StringUtil; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.preferences.ScopedPreferenceStore; import io.sloeber.core.api.JsonManager; import io.sloeber.ui.Activator; import io.sloeber.ui.Messages; import io.sloeber.ui.helpers.MyPreferences; public class ThirdPartyHardwareSelectionPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private static final String KEY_UPDATE_JASONS = "Update jsons files"; //$NON-NLS-1$ private Text urlsText; BooleanFieldEditor upDateJsons; public ThirdPartyHardwareSelectionPage() { super(org.eclipse.jface.preference.FieldEditorPreferencePage.GRID); setDescription(Messages.json_maintain); setPreferenceStore(new ScopedPreferenceStore(ConfigurationScope.INSTANCE, MyPreferences.NODE_ARDUINO)); } @Override public boolean performOk() { JsonManager.setURL(this.urlsText.getText().split(System.lineSeparator())); JsonManager.setUpdateJsonFilesFlag(this.upDateJsons.getBooleanValue()); return super.performOk(); } @Override protected void performDefaults() { super.performDefaults(); this.urlsText.setText(JsonManager.getDefaultURLs()); } @Override protected void createFieldEditors() { String selectedJsons[] = JsonManager.getURLList(); final Composite parent = getFieldEditorParent(); // Composite control = new Composite(parent, SWT.NONE); Label title = new Label(parent, SWT.UP); title.setFont(parent.getFont()); title.setText(Messages.ui_url_for_index_file); title.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); this.urlsText = new Text(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER | SWT.WRAP); GridData gd = new GridData(GridData.FILL_BOTH); this.urlsText.setLayoutData(gd); this.urlsText.setText(StringUtil.join(selectedJsons, System.lineSeparator())); this.upDateJsons = new BooleanFieldEditor(KEY_UPDATE_JASONS, Messages.json_update, BooleanFieldEditor.DEFAULT, parent); addField(this.upDateJsons); final Hyperlink link = new Hyperlink(parent, SWT.NONE); link.setText(Messages.json_find); link.setHref("https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls"); //$NON-NLS-1$ link.setUnderlined(true); link.addHyperlinkListener(new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent he) { try { org.eclipse.swt.program.Program.launch(link.getHref().toString()); } catch (IllegalArgumentException e) { Activator.log(new Status(IStatus.ERROR, Activator.getId(), Messages.json_browser_fail, e)); } } }); } @Override public void init(IWorkbench arg0) { // Nothing to do here } }