/******************************************************************************* * Copyright (c) 2000, 2009 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; import org.eclipse.team.internal.ccvs.core.IConnectionMethod; import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation; import org.eclipse.team.internal.ui.SWTUtils; import org.eclipse.ui.*; import org.eclipse.ui.dialogs.PreferenceLinkArea; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; public class ExtMethodPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { Text cvsRsh; Text cvsServer; Text cvsRshParameters; private Button useExternal; private Button useInternal; private Combo methodType; private Control internal, external; /* * @see PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); SelectionAdapter selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateEnablements(); } }; // create radio buttons in a consecutive manner (see bug 282032) useExternal = createRadioButton(composite, CVSUIMessages.ExtMethodPreferencePage_0, 1); useExternal.addSelectionListener(selectionListener); useInternal = createRadioButton(composite, CVSUIMessages.ExtMethodPreferencePage_1, 1); useInternal.addSelectionListener(selectionListener); external = createExternalArea(composite); internal = createInternalArea(composite); PreferenceLinkArea proxyLink = SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSPreferencesPage_52, CVSUIMessages.CVSPreferencesPage_53); PreferenceLinkArea ssh2Link = SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSPreferencesPage_54, CVSUIMessages.CVSPreferencesPage_55); // lay out controls in a different order than they were created in FormLayout formLayout = new FormLayout(); composite.setLayout(formLayout); FormData data = new FormData(); data.top = new FormAttachment(0, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); useExternal.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(useExternal, 5, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); external.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(external, 5, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); useInternal.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(useInternal, 5, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); internal.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(internal, 5, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); proxyLink.getControl().setLayoutData(data); data = new FormData(); data.top = new FormAttachment(proxyLink.getControl(), 5, SWT.DEFAULT); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); ssh2Link.getControl().setLayoutData(data); initializeDefaults(); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.EXT_PREFERENCE_PAGE); Dialog.applyDialogFont(parent); return composite; } private void updateEnablements() { external.setEnabled(useExternal.getSelection()); cvsRsh.setEnabled(useExternal.getSelection()); cvsRshParameters.setEnabled(useExternal.getSelection()); cvsServer.setEnabled(useExternal.getSelection()); internal.setEnabled(!useExternal.getSelection()); methodType.setEnabled(!useExternal.getSelection()); } private Control createInternalArea(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginWidth = 5; layout.marginHeight = 5; layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label intro = new Label(composite, SWT.LEFT | SWT.WRAP); intro.setText(CVSUIMessages.ExtMethodPreferencePage_2); GridData data = new GridData(); data.horizontalSpan = 2; data.horizontalAlignment = GridData.FILL; data.widthHint = 300; intro.setLayoutData(data); createLabel(composite, CVSUIMessages.CVSPropertiesPage_connectionType, 1); methodType = createCombo(composite); return composite; } protected Control createExternalArea(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginWidth = 5; layout.marginHeight = 5; layout.numColumns = 3; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label intro = new Label(composite, SWT.LEFT | SWT.WRAP); intro.setText(CVSUIMessages.ExtMethodPreferencePage_message); GridData data = new GridData(); data.horizontalSpan = 3; data.horizontalAlignment = GridData.FILL; data.widthHint = 300; intro.setLayoutData(data); new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_RSH); cvsRsh = new Text(composite, SWT.BORDER); cvsRsh.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final Button b = new Button(composite, SWT.NONE); b.setText(CVSUIMessages.ExtMethodPreferencePage_Browse); data = new GridData(); data.horizontalAlignment = GridData.FILL; int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, b.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); b.setLayoutData(data); b.addListener(SWT.MouseDown, new Listener() { public void handleEvent (Event event) { FileDialog d = new FileDialog(getShell()); d.setText(CVSUIMessages.ExtMethodPreferencePage_Details); String file = d.open(); if(file!=null) { setCvsRshText(file); } } }); new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_RSH_Parameters); cvsRshParameters = new Text(composite, SWT.BORDER); data = new GridData(); data.horizontalSpan = 2; data.horizontalAlignment = GridData.FILL; cvsRshParameters.setLayoutData(data); new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_SERVER__7); cvsServer = new Text(composite, SWT.BORDER); data = new GridData(); data.horizontalSpan = 2; data.horizontalAlignment = GridData.FILL; cvsServer.setLayoutData(data); PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsRsh, IHelpContextIds.EXT_PREFERENCE_RSH); PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsRshParameters, IHelpContextIds.EXT_PREFERENCE_PARAM); PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsServer, IHelpContextIds.EXT_PREFERENCE_SERVER); return composite; } private void initializeDefaults() { IPreferenceStore store = getPreferenceStore(); String rsh = store.getString(ICVSUIConstants.PREF_CVS_RSH); String parameter = store.getString(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS); String server = store.getString(ICVSUIConstants.PREF_CVS_SERVER); String method = store.getString(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY); initializeDefaults(rsh, parameter, server, method); } /* * Set CVS_RSH program */ protected void setCvsRshText(String s) { cvsRsh.setText(s); } /* * @see IWorkbenchPreferencePage#init(IWorkbench) */ public void init(IWorkbench workbench) { } /* * @see IPreferencePage#performOk() */ public boolean performOk() { IPreferenceStore store = getPreferenceStore(); String method; if (useExternal.getSelection()) { method = "ext"; //$NON-NLS-1$ store.setValue(ICVSUIConstants.PREF_CVS_RSH, cvsRsh.getText()); store.setValue(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS, cvsRshParameters.getText()); store.setValue(ICVSUIConstants.PREF_CVS_SERVER, cvsServer.getText()); CVSProviderPlugin.getPlugin().setCvsRshCommand(cvsRsh.getText()); CVSProviderPlugin.getPlugin().setCvsRshParameters(cvsRshParameters.getText()); CVSProviderPlugin.getPlugin().setCvsServer(cvsServer.getText()); } else { method = methodType.getText(); } store.setValue(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY, method); CVSRepositoryLocation.setExtConnectionMethodProxy(method); CVSUIPlugin.getPlugin().savePluginPreferences(); return super.performOk(); } /* * @see PreferencePage#performDefaults() */ protected void performDefaults() { IPreferenceStore store = getPreferenceStore(); String rsh = store.getDefaultString(ICVSUIConstants.PREF_CVS_RSH); String parameter = store.getDefaultString(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS); String server = store.getDefaultString(ICVSUIConstants.PREF_CVS_SERVER); String method = store.getDefaultString(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY); initializeDefaults(rsh, parameter, server, method); super.performDefaults(); } private void initializeDefaults(String rsh, String parameters, String server, String method) { cvsRsh.setText(rsh); cvsRshParameters.setText(parameters); cvsServer.setText(server); IConnectionMethod[] methods = CVSRepositoryLocation.getPluggedInConnectionMethods(); for (int i = 0; i < methods.length; i++) { String name = methods[i].getName(); if (!name.equals("ext")) { //$NON-NLS-1$ methodType.add(name); } } if (method.equals("ext")) { //$NON-NLS-1$ methodType.select(0); } else { methodType.select(methodType.indexOf(method)); } useExternal.setSelection(method.equals("ext")); //$NON-NLS-1$ useInternal.setSelection(!method.equals("ext")); //$NON-NLS-1$ updateEnablements(); } /* * @see PreferencePage#doGetPreferenceStore() */ protected IPreferenceStore doGetPreferenceStore() { return CVSUIPlugin.getPlugin().getPreferenceStore(); } protected Button createRadioButton(Composite parent, String label, int span) { Button button = new Button(parent, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = span; button.setLayoutData(data); return button; } protected Label createLabel(Composite parent, String text, int span) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = span; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } protected Combo createCombo(Composite parent) { Combo combo = new Combo(parent, SWT.READ_ONLY); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; data.horizontalSpan = 1; combo.setLayoutData(data); return combo; } }