/******************************************************************************* * Copyright (c) 2006, 2010 Phil Muldoon <pkmuldoon@picobot.org> and others. * 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: * Phil Muldoon <pmuldoon@redhat.com> - initial API and implementation * Kyu Lee <klee@redhat.com> - editor support * Alexander Kurtakov (Red Hat) - remove parts notneeded * Red Hat Inc. - ongoing maintenance *******************************************************************************/ package org.eclipse.linuxtools.internal.changelog.core; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; 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.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.osgi.service.prefs.BackingStoreException; /** * @author pmuldoon (Phil Muldoon) */ /** * This class implements a sample preference page that is added to the * preference dialog based on the registration. */ public class ChangeLogPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { private Text emailField; private Text nameField; private List formatterList; private List editorList; private Composite createComposite(Composite parent, int numColumns) { Composite composite = new Composite(parent, SWT.NULL); // GridLayout GridLayout layout = new GridLayout(); layout.numColumns = numColumns; composite.setLayout(layout); // GridData GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); return composite; } private Label createLabel(Composite parent, String text) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = 2; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } private Text createTextField(Composite parent) { Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; data.verticalAlignment = GridData.CENTER; data.grabExcessVerticalSpace = false; text.setLayoutData(data); return text; } private List createListBox(Composite parent, int sizeHint) { List list = new List(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; data.verticalAlignment = GridData.CENTER; data.grabExcessVerticalSpace = false; data.heightHint = list.getItemHeight() * sizeHint; list.setLayoutData(data); return list; } @Override public void init(IWorkbench workbench) { } @Override protected IPreferenceStore doGetPreferenceStore() { return ChangelogPlugin.getDefault().getPreferenceStore(); } private void initializeDefaults() { IPreferenceStore store = getPreferenceStore(); emailField.setText(store .getDefaultString("IChangeLogConstants.AUTHOR_EMAIL")); //$NON-NLS-1$ nameField.setText(store .getDefaultString("IChangeLogConstants.AUTHOR_NAME")); //$NON-NLS-1$ setDefaultFormatter(store); setDefaultEditor(store); storeValues(); } private void setDefaultFormatter(IPreferenceStore store) { String defaultFormatter = store .getDefaultString("IChangeLogConstants.DEFAULT_FORMATTER"); //$NON-NLS-1$ for (int i = 0; i < formatterList.getItemCount(); i++) { if (formatterList.getItem(i).equals(defaultFormatter)) { formatterList.setSelection(i); return; } } } private void setDefaultEditor(IPreferenceStore store) { String defaultEditor = store .getDefaultString("IChangeLogConstants.DEFAULT_EDITOR"); //$NON-NLS-1$ for (int i = 0; i < editorList.getItemCount(); i++) { if (editorList.getItem(i).equals(defaultEditor)) { editorList.setSelection(i); return; } } } private void populateFormatList(IPreferenceStore store) { IExtensionPoint parserExtensions = Platform .getExtensionRegistry() .getExtensionPoint( "org.eclipse.linuxtools.changelog.core", "formatterContribution"); //$NON-NLS-1$ //$NON-NLS-2$ if (parserExtensions != null) { IConfigurationElement[] elements = parserExtensions .getConfigurationElements(); for (IConfigurationElement element : elements) { if (element.getName().equals("formatter")) {//$NON-NLS-1$ String fname = element.getAttribute("name"); //$NON-NLS-1$\ // only add formatters for external files, not in-file formatters. if (element.getAttribute("inFile").equalsIgnoreCase("false")) { formatterList.add(fname); } if (fname .equals(store .getString("IChangeLogConstants.DEFAULT_FORMATTER"))) { //$NON-NLS-1$ formatterList .setSelection(formatterList.getItemCount() - 1); } } } } } private void populateEditorList(IPreferenceStore store) { IExtensionPoint editorExtensions = Platform .getExtensionRegistry() .getExtensionPoint( "org.eclipse.linuxtools.changelog.core", "editorContribution"); //$NON-NLS-1$ //$NON-NLS-2$ if (editorExtensions != null) { IConfigurationElement[] elements = editorExtensions .getConfigurationElements(); for (IConfigurationElement element : elements) { if (element.getName().equals("editor")) {//$NON-NLS-1$ String fname = element.getAttribute("name"); //$NON-NLS-1$ editorList.add(fname); if (fname.equals(store .getString("IChangeLogConstants.DEFAULT_EDITOR"))) {//$NON-NLS-1$ editorList.setSelection(editorList.getItemCount() - 1); } } } } } private void initializeValues() { IPreferenceStore store = getPreferenceStore(); emailField.setText(store.getString("IChangeLogConstants.AUTHOR_EMAIL")); //$NON-NLS-1$ nameField.setText(store.getString("IChangeLogConstants.AUTHOR_NAME")); //$NON-NLS-1$ populateFormatList(store); populateEditorList(store); } private void storeValues() { IPreferenceStore store = getPreferenceStore(); store.setValue("IChangeLogConstants.AUTHOR_NAME", nameField.getText()); //$NON-NLS-1$ store .setValue( "IChangeLogConstants.AUTHOR_EMAIL", emailField.getText()); //$NON-NLS-1$ String[] selection = formatterList.getSelection(); if (selection != null && selection.length > 0) { store.setValue("IChangeLogConstants.DEFAULT_FORMATTER", selection[0]); //$NON-NLS-1$ } String[] selection2 = editorList.getSelection(); if (selection2 != null && selection2.length > 0) { store.setValue("IChangeLogConstants.DEFAULT_EDITOR", selection2[0]); //$NON-NLS-1$ } } @Override protected void performDefaults() { super.performDefaults(); initializeDefaults(); } @Override public boolean performOk() { storeValues(); try { InstanceScope.INSTANCE.getNode(ChangelogPlugin.PLUGIN_ID).flush(); } catch (BackingStoreException e) { // ignore saving exception } return true; } @Override protected Control createContents(Composite parent) { // composite_textField << parent Composite composite_textField = createComposite(parent, 2); createLabel(composite_textField, Messages .getString("ChangeLogPreferencesPage.AuthorName")); //$NON-NLS-1$ nameField = createTextField(composite_textField); // composite_textField << parent createLabel(composite_textField, Messages .getString("ChangeLogPreferencesPage.AuthorEmail")); //$NON-NLS-1$ emailField = createTextField(composite_textField); createLabel(composite_textField, Messages .getString("ChangeLogPreferencesPage.Formatters")); //$NON-NLS-1$ formatterList = createListBox(composite_textField, 3); createLabel(composite_textField, Messages .getString("ChangeLogPreferencesPage.Editors")); //$NON-NLS-1$ editorList = createListBox(composite_textField, 3); initializeValues(); return new Composite(parent, SWT.NULL); } }