1 /******************************************************************************* 2 * Copyright (c) 2000, 2009 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.team.internal.ccvs.ui; 15 16 import org.eclipse.jface.dialogs.Dialog; 17 import org.eclipse.jface.dialogs.IDialogConstants; 18 import org.eclipse.jface.preference.IPreferenceStore; 19 import org.eclipse.jface.preference.PreferencePage; 20 import org.eclipse.swt.SWT; 21 import org.eclipse.swt.events.SelectionAdapter; 22 import org.eclipse.swt.events.SelectionEvent; 23 import org.eclipse.swt.layout.*; 24 import org.eclipse.swt.widgets.*; 25 import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; 26 import org.eclipse.team.internal.ccvs.core.IConnectionMethod; 27 import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation; 28 import org.eclipse.team.internal.ui.SWTUtils; 29 import org.eclipse.ui.*; 30 import org.eclipse.ui.dialogs.PreferenceLinkArea; 31 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; 32 33 public class ExtMethodPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { 34 35 Text cvsRsh; 36 Text cvsServer; 37 Text cvsRshParameters; 38 private Button useExternal; 39 private Button useInternal; 40 private Combo methodType; 41 private Control internal, external; 42 43 @Override createContents(Composite parent)44 protected Control createContents(Composite parent) { 45 Composite composite = new Composite(parent, SWT.NULL); 46 47 SelectionAdapter selectionListener = new SelectionAdapter() { 48 @Override 49 public void widgetSelected(SelectionEvent e) { 50 updateEnablements(); 51 } 52 }; 53 54 // create radio buttons in a consecutive manner (see bug 282032) 55 useExternal = createRadioButton(composite, CVSUIMessages.ExtMethodPreferencePage_0, 1); 56 useExternal.addSelectionListener(selectionListener); 57 useInternal = createRadioButton(composite, CVSUIMessages.ExtMethodPreferencePage_1, 1); 58 useInternal.addSelectionListener(selectionListener); 59 60 external = createExternalArea(composite); 61 internal = createInternalArea(composite); 62 63 PreferenceLinkArea proxyLink = SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSPreferencesPage_52, CVSUIMessages.CVSPreferencesPage_53); 64 65 PreferenceLinkArea ssh2Link = SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSPreferencesPage_54, CVSUIMessages.CVSPreferencesPage_55); 66 67 // lay out controls in a different order than they were created in 68 FormLayout formLayout = new FormLayout(); 69 composite.setLayout(formLayout); 70 71 FormData data = new FormData(); 72 data.top = new FormAttachment(0, SWT.DEFAULT); 73 data.left = new FormAttachment(0, 0); 74 data.right = new FormAttachment(100, 0); 75 useExternal.setLayoutData(data); 76 77 data = new FormData(); 78 data.top = new FormAttachment(useExternal, 5, SWT.DEFAULT); 79 data.left = new FormAttachment(0, 0); 80 data.right = new FormAttachment(100, 0); 81 external.setLayoutData(data); 82 83 data = new FormData(); 84 data.top = new FormAttachment(external, 5, SWT.DEFAULT); 85 data.left = new FormAttachment(0, 0); 86 data.right = new FormAttachment(100, 0); 87 useInternal.setLayoutData(data); 88 89 data = new FormData(); 90 data.top = new FormAttachment(useInternal, 5, SWT.DEFAULT); 91 data.left = new FormAttachment(0, 0); 92 data.right = new FormAttachment(100, 0); 93 internal.setLayoutData(data); 94 95 data = new FormData(); 96 data.top = new FormAttachment(internal, 5, SWT.DEFAULT); 97 data.left = new FormAttachment(0, 0); 98 data.right = new FormAttachment(100, 0); 99 proxyLink.getControl().setLayoutData(data); 100 101 data = new FormData(); 102 data.top = new FormAttachment(proxyLink.getControl(), 5, SWT.DEFAULT); 103 data.left = new FormAttachment(0, 0); 104 data.right = new FormAttachment(100, 0); 105 ssh2Link.getControl().setLayoutData(data); 106 107 initializeDefaults(); 108 PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.EXT_PREFERENCE_PAGE); 109 Dialog.applyDialogFont(parent); 110 return composite; 111 } 112 updateEnablements()113 private void updateEnablements() { 114 external.setEnabled(useExternal.getSelection()); 115 cvsRsh.setEnabled(useExternal.getSelection()); 116 cvsRshParameters.setEnabled(useExternal.getSelection()); 117 cvsServer.setEnabled(useExternal.getSelection()); 118 internal.setEnabled(!useExternal.getSelection()); 119 methodType.setEnabled(!useExternal.getSelection()); 120 } 121 createInternalArea(Composite parent)122 private Control createInternalArea(Composite parent) { 123 Composite composite = new Composite(parent, SWT.NULL); 124 GridLayout layout = new GridLayout(); 125 layout.marginWidth = 5; 126 layout.marginHeight = 5; 127 layout.numColumns = 2; 128 composite.setLayout(layout); 129 composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 130 131 Label intro = new Label(composite, SWT.LEFT | SWT.WRAP); 132 intro.setText(CVSUIMessages.ExtMethodPreferencePage_2); 133 GridData data = new GridData(); 134 data.horizontalSpan = 2; 135 data.horizontalAlignment = GridData.FILL; 136 data.widthHint = 300; 137 intro.setLayoutData(data); 138 139 createLabel(composite, CVSUIMessages.CVSPropertiesPage_connectionType, 1); 140 methodType = createCombo(composite); 141 142 return composite; 143 } createExternalArea(Composite parent)144 protected Control createExternalArea(Composite parent) { 145 Composite composite = new Composite(parent, SWT.NULL); 146 GridLayout layout = new GridLayout(); 147 layout.marginWidth = 5; 148 layout.marginHeight = 5; 149 layout.numColumns = 3; 150 composite.setLayout(layout); 151 composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 152 153 Label intro = new Label(composite, SWT.LEFT | SWT.WRAP); 154 intro.setText(CVSUIMessages.ExtMethodPreferencePage_message); 155 GridData data = new GridData(); 156 data.horizontalSpan = 3; 157 data.horizontalAlignment = GridData.FILL; 158 data.widthHint = 300; 159 intro.setLayoutData(data); 160 161 new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_RSH); 162 cvsRsh = new Text(composite, SWT.BORDER); 163 cvsRsh.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 164 165 final Button b = new Button(composite, SWT.NONE); 166 b.setText(CVSUIMessages.ExtMethodPreferencePage_Browse); 167 data = new GridData(); 168 data.horizontalAlignment = GridData.FILL; 169 int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); 170 data.widthHint = Math.max(widthHint, b.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); 171 b.setLayoutData(data); 172 b.addListener(SWT.MouseDown, event -> { 173 FileDialog d = new FileDialog(getShell()); 174 d.setText(CVSUIMessages.ExtMethodPreferencePage_Details); 175 String file = d.open(); 176 if (file != null) { 177 setCvsRshText(file); 178 } 179 }); 180 181 new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_RSH_Parameters); 182 cvsRshParameters = new Text(composite, SWT.BORDER); 183 data = new GridData(); 184 data.horizontalSpan = 2; 185 data.horizontalAlignment = GridData.FILL; 186 cvsRshParameters.setLayoutData(data); 187 188 new Label(composite, SWT.LEFT).setText(CVSUIMessages.ExtMethodPreferencePage_CVS_SERVER__7); 189 cvsServer = new Text(composite, SWT.BORDER); 190 data = new GridData(); 191 data.horizontalSpan = 2; 192 data.horizontalAlignment = GridData.FILL; 193 cvsServer.setLayoutData(data); 194 195 PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsRsh, IHelpContextIds.EXT_PREFERENCE_RSH); 196 PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsRshParameters, IHelpContextIds.EXT_PREFERENCE_PARAM); 197 PlatformUI.getWorkbench().getHelpSystem().setHelp(cvsServer, IHelpContextIds.EXT_PREFERENCE_SERVER); 198 return composite; 199 } 200 initializeDefaults()201 private void initializeDefaults() { 202 IPreferenceStore store = getPreferenceStore(); 203 String rsh = store.getString(ICVSUIConstants.PREF_CVS_RSH); 204 String parameter = store.getString(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS); 205 String server = store.getString(ICVSUIConstants.PREF_CVS_SERVER); 206 String method = store.getString(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY); 207 initializeDefaults(rsh, parameter, server, method); 208 } 209 210 /* 211 * Set CVS_RSH program 212 */ setCvsRshText(String s)213 protected void setCvsRshText(String s) { 214 cvsRsh.setText(s); 215 } 216 217 @Override init(IWorkbench workbench)218 public void init(IWorkbench workbench) { 219 } 220 221 @Override performOk()222 public boolean performOk() { 223 IPreferenceStore store = getPreferenceStore(); 224 String method; 225 if (useExternal.getSelection()) { 226 method = "ext"; //$NON-NLS-1$ 227 store.setValue(ICVSUIConstants.PREF_CVS_RSH, cvsRsh.getText()); 228 store.setValue(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS, cvsRshParameters.getText()); 229 store.setValue(ICVSUIConstants.PREF_CVS_SERVER, cvsServer.getText()); 230 CVSProviderPlugin.getPlugin().setCvsRshCommand(cvsRsh.getText()); 231 CVSProviderPlugin.getPlugin().setCvsRshParameters(cvsRshParameters.getText()); 232 CVSProviderPlugin.getPlugin().setCvsServer(cvsServer.getText()); 233 } else { 234 method = methodType.getText(); 235 } 236 store.setValue(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY, method); 237 CVSRepositoryLocation.setExtConnectionMethodProxy(method); 238 CVSUIPlugin.getPlugin().savePluginPreferences(); 239 return super.performOk(); 240 } 241 242 @Override performDefaults()243 protected void performDefaults() { 244 IPreferenceStore store = getPreferenceStore(); 245 String rsh = store.getDefaultString(ICVSUIConstants.PREF_CVS_RSH); 246 String parameter = store.getDefaultString(ICVSUIConstants.PREF_CVS_RSH_PARAMETERS); 247 String server = store.getDefaultString(ICVSUIConstants.PREF_CVS_SERVER); 248 String method = store.getDefaultString(ICVSUIConstants.PREF_EXT_CONNECTION_METHOD_PROXY); 249 initializeDefaults(rsh, parameter, server, method); 250 super.performDefaults(); 251 } 252 initializeDefaults(String rsh, String parameters, String server, String method)253 private void initializeDefaults(String rsh, String parameters, String server, String method) { 254 cvsRsh.setText(rsh); 255 cvsRshParameters.setText(parameters); 256 cvsServer.setText(server); 257 IConnectionMethod[] methods = CVSRepositoryLocation.getPluggedInConnectionMethods(); 258 for (IConnectionMethod m : methods) { 259 String name = m.getName(); 260 if (!name.equals("ext")) { //$NON-NLS-1$ 261 methodType.add(name); 262 } 263 } 264 if (method.equals("ext")) { //$NON-NLS-1$ 265 methodType.select(0); 266 } else { 267 methodType.select(methodType.indexOf(method)); 268 } 269 useExternal.setSelection(method.equals("ext")); //$NON-NLS-1$ 270 useInternal.setSelection(!method.equals("ext")); //$NON-NLS-1$ 271 updateEnablements(); 272 } 273 274 @Override doGetPreferenceStore()275 protected IPreferenceStore doGetPreferenceStore() { 276 return CVSUIPlugin.getPlugin().getPreferenceStore(); 277 } 278 createRadioButton(Composite parent, String label, int span)279 protected Button createRadioButton(Composite parent, String label, int span) { 280 Button button = new Button(parent, SWT.RADIO); 281 button.setText(label); 282 GridData data = new GridData(); 283 data.horizontalSpan = span; 284 button.setLayoutData(data); 285 return button; 286 } 287 createLabel(Composite parent, String text, int span)288 protected Label createLabel(Composite parent, String text, int span) { 289 Label label = new Label(parent, SWT.LEFT); 290 label.setText(text); 291 GridData data = new GridData(); 292 data.horizontalSpan = span; 293 data.horizontalAlignment = GridData.FILL; 294 label.setLayoutData(data); 295 return label; 296 } createCombo(Composite parent)297 protected Combo createCombo(Composite parent) { 298 Combo combo = new Combo(parent, SWT.READ_ONLY); 299 GridData data = new GridData(GridData.FILL_HORIZONTAL); 300 data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; 301 data.horizontalSpan = 1; 302 combo.setLayoutData(data); 303 return combo; 304 } 305 } 306