/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.ivyde.internal.eclipse.ui;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.dialogs.PreferencesUtil;
public abstract class AbstractSetupTab {
private Button projectSpecificButton;
private Link mainGeneralSettingsLink;
private Composite setupEditor;
public AbstractSetupTab(final TabFolder tabs, String title, final String preferencePageId, IProject project) {
TabItem tab = new TabItem(tabs, SWT.NONE);
tab.setText(title);
Composite composite = new Composite(tabs, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
Composite headerComposite = new Composite(composite, SWT.NONE);
headerComposite.setLayout(new GridLayout(2, false));
headerComposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
projectSpecificButton = new Button(headerComposite, SWT.CHECK);
projectSpecificButton.setText("Enable project specific settings");
projectSpecificButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
projectSpecificChanged();
}
});
mainGeneralSettingsLink = new Link(headerComposite, SWT.NONE);
mainGeneralSettingsLink.setFont(headerComposite.getFont());
mainGeneralSettingsLink.setText("<A>Configure Workspace Settings...</A>");
mainGeneralSettingsLink.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(tabs.getShell(),
preferencePageId, null, null);
dialog.open();
}
});
mainGeneralSettingsLink.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, false));
Label horizontalLine = new Label(headerComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
horizontalLine.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1));
// CheckStyle:MagicNumber| OFF
Composite configComposite = new Composite(composite, SWT.NONE);
configComposite.setLayout(new GridLayout());
configComposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
setupEditor = createSetupEditor(configComposite, project);
tab.setControl(composite);
}
abstract protected Composite createSetupEditor(Composite configComposite, IProject project);
public void init(boolean isProjectSpecific) {
if (isProjectSpecific) {
projectSpecificButton.setSelection(true);
} else {
projectSpecificButton.setSelection(false);
setupEditor.setEnabled(false);
}
}
public boolean isProjectSpecific() {
return projectSpecificButton.getSelection();
}
public void projectSpecificChanged() {
boolean projectSpecific = projectSpecificButton.getSelection();
mainGeneralSettingsLink.setEnabled(!projectSpecific);
setupEditor.setEnabled(projectSpecific);
}
}