| /******************************************************************************* |
| * Copyright (c) 2013 Christian Pontesegger and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * Contributors: |
| * Christian Pontesegger - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ease.ui.preferences; |
| |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.preferences.InstanceScope; |
| import org.eclipse.ease.service.EngineDescription; |
| import org.eclipse.ease.service.IScriptService; |
| import org.eclipse.ease.service.ScriptType; |
| import org.eclipse.ease.ui.Activator; |
| import org.eclipse.ease.ui.Messages; |
| import org.eclipse.jface.preference.PreferencePage; |
| import org.eclipse.jface.viewers.ArrayContentProvider; |
| import org.eclipse.jface.viewers.ComboViewer; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.jface.viewers.ViewerComparator; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.ScrolledComposite; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.TabFolder; |
| import org.eclipse.swt.widgets.TabItem; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchPreferencePage; |
| import org.eclipse.ui.PlatformUI; |
| import org.osgi.service.prefs.Preferences; |
| |
| public class ShellPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { |
| private Text fTxtHistoryLength; |
| private Button fChkAutoFocusText; |
| private Button fChkKeepLastCommand; |
| private TabFolder fTabFolder; |
| private Button fChkModulesAsFlatList; |
| private ComboViewer comboViewer; |
| |
| public ShellPreferencePage() { |
| } |
| |
| @Override |
| public void init(IWorkbench workbench) { |
| setPreferenceStore(Activator.getDefault().getPreferenceStore()); |
| } |
| |
| @Override |
| protected Control createContents(Composite parent) { |
| final Composite container = new Composite(parent, SWT.NONE); |
| container.setLayout(new GridLayout(2, false)); |
| |
| final Label lblNewLabel = new Label(container, SWT.WRAP); |
| lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); |
| lblNewLabel.setText(Messages.ShellPreferencePage_lookAndFeel); |
| |
| final Group grpAppearance = new Group(container, SWT.NONE); |
| grpAppearance.setLayout(new GridLayout(3, false)); |
| final GridData gd_grpAppearance = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); |
| gd_grpAppearance.verticalIndent = 15; |
| grpAppearance.setLayoutData(gd_grpAppearance); |
| grpAppearance.setText(Messages.ShellPreferencePage_appearance); |
| |
| final Label lblSeeColorsAnd = new Label(grpAppearance, SWT.NONE); |
| lblSeeColorsAnd.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); |
| lblSeeColorsAnd.setText(Messages.ShellPreferencePage_colorAndFonts); |
| |
| final Label lblHistoryLength = new Label(grpAppearance, SWT.NONE); |
| lblHistoryLength.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); |
| lblHistoryLength.setText(Messages.ShellPreferencePage_historyLength); |
| |
| fTxtHistoryLength = new Text(grpAppearance, SWT.BORDER); |
| |
| final Label lblEntries = new Label(grpAppearance, SWT.NONE); |
| lblEntries.setText(Messages.ShellPreferencePage_entries); |
| |
| fChkModulesAsFlatList = new Button(grpAppearance, SWT.CHECK); |
| fChkModulesAsFlatList.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); |
| fChkModulesAsFlatList.setText(Messages.ShellPreferencePage_flatModuleList); |
| |
| fChkAutoFocusText = new Button(grpAppearance, SWT.CHECK); |
| fChkAutoFocusText.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); |
| fChkAutoFocusText.setText(Messages.ShellPreferencePage_autoFocus); |
| |
| fChkKeepLastCommand = new Button(grpAppearance, SWT.CHECK); |
| fChkKeepLastCommand.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); |
| fChkKeepLastCommand.setText(Messages.ShellPreferencePage_keepLastCmd); |
| |
| final Label lblPreferredEngine = new Label(container, SWT.NONE); |
| lblPreferredEngine.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); |
| lblPreferredEngine.setText(Messages.ShellPreferencePage_preferredEngine); |
| |
| comboViewer = new ComboViewer(container, SWT.NONE); |
| final Combo combo = comboViewer.getCombo(); |
| combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); |
| comboViewer.setContentProvider(ArrayContentProvider.getInstance()); |
| comboViewer.setComparator(new ViewerComparator() { |
| @Override |
| public int compare(Viewer viewer, Object e1, Object e2) { |
| return ((EngineDescription) e1).getName().compareTo(((EngineDescription) e2).getName()); |
| } |
| }); |
| |
| final Label lblShellStartupCommands = new Label(container, SWT.NONE); |
| lblShellStartupCommands.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); |
| lblShellStartupCommands.setText(Messages.ShellPreferencePage_shellStartupCmds); |
| |
| fTabFolder = new TabFolder(container, SWT.NONE); |
| fTabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); |
| |
| final IScriptService scriptService = PlatformUI.getWorkbench().getService(IScriptService.class); |
| final Map<String, ScriptType> scriptTypes = scriptService.getAvailableScriptTypes(); |
| for (final String type : scriptTypes.keySet()) { |
| final TabItem tbtmNewItem = new TabItem(fTabFolder, SWT.NONE); |
| tbtmNewItem.setText(type); |
| |
| final ScrolledComposite scrolledComposite = new ScrolledComposite(fTabFolder, SWT.H_SCROLL | SWT.V_SCROLL); |
| tbtmNewItem.setControl(scrolledComposite); |
| scrolledComposite.setExpandHorizontal(true); |
| scrolledComposite.setExpandVertical(true); |
| |
| final Text input = new Text(scrolledComposite, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI); |
| scrolledComposite.setContent(input); |
| } |
| |
| performDefaults(); |
| |
| return container; |
| } |
| |
| @Override |
| protected void performDefaults() { |
| final Preferences prefs = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID).node(IPreferenceConstants.NODE_SHELL); |
| |
| final int defaultLength = prefs.getInt(IPreferenceConstants.SHELL_HISTORY_LENGTH, IPreferenceConstants.DEFAULT_SHELL_HISTORY_LENGTH); |
| fTxtHistoryLength.setText(Integer.toString(defaultLength)); |
| |
| final boolean flatList = prefs.getBoolean(IPreferenceConstants.SHELL_MODULES_AS_LIST, IPreferenceConstants.DEFAULT_SHELL_MODULES_AS_LIST); |
| fChkAutoFocusText.setSelection(flatList); |
| |
| final boolean autofocus = prefs.getBoolean(IPreferenceConstants.SHELL_AUTOFOCUS, IPreferenceConstants.DEFAULT_SHELL_AUTOFOCUS); |
| fChkAutoFocusText.setSelection(autofocus); |
| |
| final boolean keepCommand = prefs.getBoolean(IPreferenceConstants.SHELL_KEEP_COMMAND, IPreferenceConstants.DEFAULT_SHELL_KEEP_COMMAND); |
| fChkKeepLastCommand.setSelection(keepCommand); |
| |
| final IScriptService scriptService = PlatformUI.getWorkbench().getService(IScriptService.class); |
| comboViewer.setInput(scriptService.getEngines()); |
| final String engineID = prefs.get(IPreferenceConstants.SHELL_DEFAULT_ENGINE, IPreferenceConstants.DEFAULT_SHELL_DEFAULT_ENGINE); |
| final EngineDescription defaultEngine = scriptService.getEngineByID(engineID); |
| if (defaultEngine != null) |
| comboViewer.setSelection(new StructuredSelection(scriptService.getEngineByID(engineID)), true); |
| |
| for (final TabItem item : fTabFolder.getItems()) { |
| final String title = item.getText(); |
| final String shellCommands = prefs.get(IPreferenceConstants.SHELL_STARTUP + title, ""); |
| |
| ((Text) ((ScrolledComposite) item.getControl()).getContent()).setText(shellCommands); |
| } |
| |
| super.performDefaults(); |
| } |
| |
| @Override |
| public boolean performOk() { |
| |
| final Preferences prefs = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID).node(IPreferenceConstants.NODE_SHELL); |
| |
| // FIXME add checks to have valid integers in the input box |
| prefs.putInt(IPreferenceConstants.SHELL_HISTORY_LENGTH, Integer.parseInt(fTxtHistoryLength.getText())); |
| |
| prefs.putBoolean(IPreferenceConstants.SHELL_MODULES_AS_LIST, fChkModulesAsFlatList.getSelection()); |
| prefs.putBoolean(IPreferenceConstants.SHELL_AUTOFOCUS, fChkAutoFocusText.getSelection()); |
| prefs.putBoolean(IPreferenceConstants.SHELL_KEEP_COMMAND, fChkKeepLastCommand.getSelection()); |
| |
| final String engineId = ((EngineDescription) ((IStructuredSelection) comboViewer.getSelection()).getFirstElement()).getID(); |
| prefs.put(IPreferenceConstants.SHELL_DEFAULT_ENGINE, engineId); |
| |
| for (final TabItem item : fTabFolder.getItems()) { |
| final String title = item.getText(); |
| final String commands = ((Text) ((ScrolledComposite) item.getControl()).getContent()).getText(); |
| |
| prefs.put(IPreferenceConstants.SHELL_STARTUP + title, commands); |
| } |
| |
| return super.performOk(); |
| } |
| } |